MySQL-Problem



  • Hallo Leute,
    bekomme z.Z. folgende Fehlermedlung, wenn ich Daten aus meiner Form an die MySQL-Tabelle schicke:
    ERROR 1062 at line 1: Duplicate entry '1' for key 1

    Was heißt das. Was muss ich machen?
    MfG

    Tobsen



  • Dein "INSERT INTO"-Befehl schlägt fehl, weil's den Primary Key '1' schon gibt. Du solltest das Primary-Key-Feld Deiner Tabelle mit AUTO_INCREMENT anlegen.



  • Hallo mady,
    mein Primary Key feld ist id und das habe ich mit AUTO_INCREMENT angelegt!
    Was soll ich denn jetzt machen?



  • hmm,
    wie sieht denn dein INSERT Befehl aus ? Ein wenig Code kann nie schaden wenn man ihn sieht. Wenn du auto_inc hast musst du nämlicgh das Feld frei lassen also '' setzen, scheinbar tust du das aber nicht zumindestens interpretiere ich dies so aus der Ferne.



  • <?
    if(send) { db = mysql_connect("127.0.0.1","Tobsen", "passwort");
    mysql_select_db("guestbook", $db);

    sql="INSERTINTObenutzer(id,name,surname,street,zipcode,placeofresidence,mobil,phone,email,datum,zeit,message,newsletter,homepage,aim,icq,birthday,age)VALUES(,sql="INSERT INTO benutzer (id,name, surname, street,zipcode, placeofresidence,mobil, phone, email, datum, zeit, message,newsletter, homepage, aim, icq, birthday, age) VALUES ('','vorname','$nachname', '', '', wohort,,,wohort, '', '', 'mailaddy', 'datum,datum', 'zeit','nachricht,nachricht', 'newsletter', 'homepage,homepage', 'aim', '$icq', '','')";

    result=mysqlquery(result= mysql_query(sql,$db);

    }
    ?>



  • Und wier sieht der MySQL Code für die Erstellung der tabelle aus?

    also z.B.

    create table
    ()

    Wie?
    😞



  • Lass beim INSERT INTO einfach das id Feld weg ... fertig



  • @mady: Hat leider nichts gebracht das id Feld wegzulassen. Ich bekomme immer noch die gleiche Fehlermeldung. Braucht ihr vielleicht noch ein paar Daten zur Fehleranalyse?
    Danke euch für eure Hilfe!



  • Versuch das:

    sql="INSERTINTObenutzer(id,name,surname,street,zipcode,placeofresidence,mobil,phone,email,datum,zeit,message,newsletter,homepage,aim,icq,birthday,age)VALUES((SELECTMAX(id)+1FROMbenutzer),sql="INSERT INTO benutzer (id,name, surname, street,zipcode, placeofresidence,mobil, phone, email, datum, zeit, message,newsletter, homepage, aim, icq, birthday, age) VALUES (**(SELECT MAX(id)+1 FROM benutzer)**,'vorname','$nachname', '', '', wohort,,,wohort, '', '', 'mailaddy', 'datum,datum', 'zeit','nachricht,nachricht', 'newsletter', 'homepage,homepage', 'aim', '$icq', '','')";

    [ Dieser Beitrag wurde am 16.10.2002 um 14:23 Uhr von agrimm editiert. ]



  • Habe das jetzt folgendermaßen geändert:

    <?
     if($send)
     {
      $db = mysql_connect("127.0.0.1","Tobsen", "chemie");
      mysql_select_db("guestbook", $db);
    
      $sql="INSERT INTO benutzer (id,name, surname, street,zipcode, placeofresidence,mobil, phone,
      email, datum, zeit, message,newsletter, homepage, aim, icq, birthday, age)
      VALUES ((SELECT MAX(id)+1 FROM benutzer),'$vorname','$nachname', '', '', $wohort, '', '',
      '$mailaddy', '$datum', '$zeit','$nachricht', '$newsletter', '$homepage', '$aim', '$icq', '','')";
      $result= mysql_query($sql,$db);
    
    }
    ?>
    

    Funktionier aber immer noch nicht. 😕 😕 😕
    Bin total ratlos. Der erste Eintrag hat noch funktioniert und alle anderen nicht. Wieso?



  • Welchen Datentyp hat die id-Spalte?



  • Hast DU den Schlüssel als Unique angelegt, wenn ja, dann kannst DU nicht mehr "inserten", sondern nur noch "updaten".

    Insert mit bereits vorhandenem SChlüssel geht nur, wenn doppelte SChlüssel erlaubt sind.
    Mit autoincrement hat das nichts zu tun: wenn man ein Feld autoincrement macht, braucht man sich selbst um das hochzählen nicht zu kümmern, sprich dieses Feld beim Insert außeracht lasssen

    Hanns



  • nein, habe den nicht unique angelegt und er hat den Typ tinyint

    Habe das Table folgendermaßen erstellt:
    CREATE TABLE benutzer(
    id tinyint(4) NOT NULL AUTO_INCREMENT,
    ....
    ....
    ....
    ....
    );



  • Original erstellt von Tobsen:
    **nein, habe den nicht unique angelegt und er hat den Typ tinyint

    Habe das Table folgendermaßen erstellt:
    CREATE TABLE benutzer(
    id tinyint(4) NOT NULL AUTO_INCREMENT,
    ....
    ....
    ....
    ....
    );**

    wenn er autoincrement ist, zählt dei Engine den Wert bei jdem neuen Satz um einen hoch. d.h. es kommen keine doppelten Einträge vor. Die schmettert dei Engine ab.

    Wenn DU nun eine ( autoincrement) ID bei INSERT = NEUER DATENSTZR anlegst, dann stellt die ENgine fest,Deine ID ist vorhanden, un mault !

    Bei insert kannst DU die ID weglassen, und musst hinerher fragen, welche ID Dein satz bekommen hat. ( es könnten ja in der Zwischen Zeit auch andere USer etwas neu angelegt haben)
    Ergo AutoIncr ist in Deinem Fall gleich UNIQUE

    Im Artikelstamm z-b sind doppelte Nummern Tödlich, nicht aber in einem Lieferschein z.b.

    Gruß Hanns



  • Aber was muss ich denn jetzt machen. Meine Datenbank nimmt keine Daten auf, auch wenn ich id weglasse. Die Fehlermeldung bleibt die gleiche. So 'ne *****!
    Aber danke für eure Hilfe!!



  • Oder heißt die Fehlermeldung vielleicht, dass 2 Einträge mit der id 1 vorhanden sind? Wenn ja, wie kann ich dann einen davon wieder löschen und wie konnte das bei AUTO_INCREMENT überhaupt passieren?



  • Da nun keiner mehr Rat weiß, habe ich beschlossen, den ersten Eintrag meiner Tabelle, also id zu löschen. Aber wie kann ich den im Nachhinein löschen?



  • Hallo,

    kann sein, daß ich da was überlesen habe. Aber hier mal die zusammenhänge aus meiner Sicht.

    @agrimm Du verwendet einen "Subquery" (verschachtelte Abfragen). Das mag zwar mit einem neuen MySQL funktionieren, aber die älteren versionen legen sich dabei auf die Nase.

    @tobsen
    Wenn Du die Tabelle mit

    CREATE TABLE benutzer (
        id int NOT NULL AUTO_INCREMENT,
        ...
        PRIMARY KEY(id)
    )
    

    anlegst und die Abfrage als

    ...
    $sql="INSERT INTO benutzer (name, surname, street,zipcode, placeofresidence,mobil, phone,
      email, datum, zeit, message,newsletter, homepage, aim, icq, birthday, age)
      VALUES ('$vorname','$nachname', '', '', $wohort, '', '',
      '$mailaddy', '$datum', '$zeit','$nachricht', '$newsletter', '$homepage', '$aim', '$icq', '','')";
      $result= mysql_query($sql,$db);
    ...
    

    abschickst, sollte das imho funktionieren.
    Änderungen dabei meinerseits:
    - Die Spalte ID als PRIMARY KEY markieren.
    - Beim INSERT sowohl in der Spaltenliste als auch bei den Werten ID rauslassen.

    So funzt das bei mir zumindest immer.



  • Vielen Dank für deine Antwort. Kannst du mir deine Änderungsvorschlage mal anhand des Quelltextes erläutern? Mir ist nämlich nicht so ganz klar, was du damit meinst.
    MfG

    Tobsen


Anmelden zum Antworten