Alex: MySQL Fehler

Ich verzweifel langsam. Vielleicht hat hier ja jemand einen Blick für das, was hier schief läuft...

    $new_id = mysql_insert_id();  
    $new_id = "item_".$new_id;  
  
    $new_entry = "ALTER TABLE item_got ADD '$new_id' INT(3) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;";  
    $make_entry = mysql_query($new_entry) OR die("Error ".mysql_errno().": <br>".mysql_error());  

Vorher wird in eine andere Tabelle eingetragen und mit einer ID via auto_increment versehen. Das Script läuft auch Tadellos durch, nur das eben der Eintrag hier nicht funktioniert. Alles andere.. Fehlerfrei.

Fehlermeldung:

Error 1064:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''item_28' INT(3) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL' at line 1

Kann mir jemand sagen, wo MySQL da nun zickt?

  1. Hallo,

    Ich verzweifel langsam. Vielleicht hat hier ja jemand einen Blick für das, was hier schief läuft...

    $new_id = mysql_insert_id();

    $new_id = "item_".$new_id;

    $new_entry = "ALTER TABLE item_got ADD '$new_id' INT(3) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;";

    Zum Quoten von Bestandteilen der [link:http://dev.mysql.com/doc/refman/5.1/en/identifiers.html@title=Schema Object Names] verwendet man im ANSI-Modus (in den verschiedensten SQL-Dialekten) das doppelte Anführungszeichen. Ist der ANSI-Modus gerade ausgeschaltet, ist das vom SQL-Dialekt abhängig. MySQL verwendet dann den Backtick.

    $make_entry = mysql_query($new_entry) OR die("Error ".mysql_errno().": <br>".mysql_error());

      
    der größte Fehler ist es selbstverständlich, bei einer einfachen Einfügeoperation in eine Tabelle in einer anderen Tabelle gleich eine ganze Spalte einfügen zu wollen. Sowas macht man nicht. Man fügt Datensätze ein, nicht Spalten.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
  2. Hi!

    Ich verzweifel langsam. Vielleicht hat hier ja jemand einen Blick für das, was hier schief läuft...

    Das sieht nach einem verkorksten Datenbankdesign aus.

    [code lang=php]    $new_id = mysql_insert_id();
        $new_id = "item_".$new_id;
        $new_entry = "ALTER TABLE item_got ADD '$new_id' INT(3) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;";

    Du fügst Spalten hinzu, deren Name sich aus einem Wert der zuletzt eingefügten Id einer anderen Tabelle ergibt? Das sieht sehr verbesserungswürdig aus. Aber zum eigentlichen Fehler. Spaltennamen sind Bezeichner und keine 'Strings'.

    Lo!

    1. Danke ^^ das hat geholfen!

      LG

      1. Mahlzeit Alex,

        Danke ^^ das hat geholfen!

        Ich denke nicht, dass das wirklich geholfen hat ... die eigentliche Ursache für Dein Problem - nämlich Dein defektes Datenbankdesign - wurde nämlich nicht behoben.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|