[MySQL 4.1] Query Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 4.1] Query Problem

    Hallo,

    ich habe ein Installationsscript, das bei mir lokal läuft, aber beim externen Webhost nicht funktioniert. Bin mir ziemlich sicher das es nur am MYSQL-Code in der DB-Anfrage liegt:

    PHP-Code:
        CREATE TABLE fields 
        
    (
            
    id INT(11AUTO_INCREMENT PRIMARY KEY
            
    status INT(11),
            
    title VARCHAR(255),
            
    description VARCHAR(135),
            
    counter INT(11),
            
    path VARCHAR(255)
        ) 
    Damit hat es zwar lokal funktioniert, aber womöglich liegt das ja an der Konfiguration des Webservers.

    Also habe ich die zu installierende Tabelle per phpMyAdmin exportiert und nun den ausgespukten Code gegen den alten oben ersetzt. Der neue sieht so aus:

    PHP-Code:
        CREATE TABLE `fields` (
            `
    idint(11NOT NULL auto_increment,
            `
    statusint(11) default NULL,
            `
    titlevarchar(255) default NULL,
            `
    descriptionvarchar(135) default NULL,
            `
    counterint(11) default NULL,
            `
    pathvarchar(255) default NULL,
            
    PRIMARY KEY  (`id`)
        ) 
    ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=
    Das funktioniert dann auch, allerdings scheint mir das gleiche Problem mit allen Queries im eigentlichen Script aufzutreten, die nun allesamt nicht mehr funktionieren.

    Hat jemand ne Idee woran das liegt?

    Vielen Dank!
    Zuletzt geändert von hugostrange; 15.01.2008, 15:04.

  • #2
    Naja, der erste Code sieht für meinen geschmack auch etwas unvollständig aus, Gefährlich ist natürlich, dass z.B. reservierte Wörter nicht gekennzeichnet werden...

    Workaround: Tabellen lokal erstellen, exportieren und dann aufm Server importieren.
    ICH BIN ICH!!!

    Kommentar


    • #3
      Original geschrieben von IchBinIch
      Naja, der erste Code sieht für meinen geschmack auch etwas unvollständig aus, Gefährlich ist natürlich, dass z.B. reservierte Wörter nicht gekennzeichnet werden...
      Was fehlt denn in diesem Code? Wie gesagt - lokal funktioniert er ja... Meinst du die Angabe eines Default-Wertes? Muss man das angeben?

      Und mit kennzeichnen meinst Du, es in Klammern zu setzen, wie im zweiten (von PHPmyAdmin generierten) Codeblock?


      Workaround: Tabellen lokal erstellen, exportieren und dann aufm Server importieren.
      Das habe ich ja dann so gemacht, allerdings wüsste ich schon gerne woran's liegt, um das wieder zum laufen zu bekommen.
      Zuletzt geändert von hugostrange; 15.01.2008, 15:14.

      Kommentar


      • #4
        Wenn du auch die zueghörige Fehlermeldung posten würdest, dann könnten wir vielleicht auch eher helfen. Reservierte Wörter sind jedenfalls keine drin, und andere zwingende Fehler sehe ich keine.
        Was IchBinIch mit auszeichnen meint, sind wahrscheinlich die Backticks. Davon würde ich allerdings abraten, denn ersten sind diese nicht portabel und zweiten verleiten sie nur zu unsauberem Design.
        EDIT:

        Jetzt habe ich grad noch schnell ins Handbuch geschaut und festgestellt, dass die Klammern sein müssen. Vielleicht gibts halt Versionen, die das akzeptieren, aber eigentlich gehören sie dazu.

        Zuletzt geändert von H2O; 15.01.2008, 15:32.
        Gruss
        H2O

        Kommentar


        • #5
          Okay, danke schonmal für die Aufklärung was die Klammern betrifft - ich glaube ich habe diese Dinger noch nie in Scripten gesehen.

          Fehlermeldung gibts keine - bis auf zwei Warungen wegen nicht definierter Variablen, was damit wohl nichts zu tun hat.

          Es passiert nur einfach nichts, wenn ein Datensatz gespeichert werden soll.
          Zuletzt geändert von hugostrange; 15.01.2008, 16:17.

          Kommentar


          • #6
            mysql_error()!
            ICH BIN ICH!!!

            Kommentar


            • #7
              Hoppla, thx... dachte eigentlich das meine DB-Klasse MySQL-Errors ausgibt.

              Nundenn, hier die Meldung:

              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 'fields (title, description, path, status, counter) VALUES ('foo' at line 1

              Kommentar


              • #8
                Original geschrieben von hugostrange
                Es passiert nur einfach nichts, wenn ein Datensatz gespeichert werden soll.
                Willst du jetzt eine Tabelle erstellen oder Daten einfügen. Für letzteres sind eigentlich andere Befehle als CREATE TABLE vorgesehen.

                Zeige mal die Abfrage, die diesen Fehler erzeugt.
                Gruss
                H2O

                Kommentar


                • #9
                  Ich habe die Tabelle per PHPmyAdmin manuell angelegt - jetzt geht es darum, das im eigentlichen Script keine Queries mehr funktionieren - die vorher lokal alle liefen. Ist nur meine Vermutung, das das die gleiche Ursache hat, wie das scheitern des Installations-Scripts.

                  Hier die Anfrage zu der eben geposteten Fehlermeldung:

                  PHP-Code:
                  $db->query("
                      INSERT INTO fields (title, description, path, status, counter) 
                      VALUES ('
                  $_POST[title]', '$_POST[description]', '$_POST[path]', '1', '0')
                  "
                  ); 
                  Zuletzt geändert von hugostrange; 15.01.2008, 16:44.

                  Kommentar


                  • #10
                    Da sind gleich mehrere Fehler drin:
                    • Indizes von assotiatven Arrays sind Strings, bei dir sind es (vermutlich undefinierte) Konstanten.
                    • Assotiatven Arrays müssen innerhalb von Strings entweder mit dem Verkettungs-Operator eingefügt werden, oder in {} stehen
                    • Nummerische Argumente sollten nicht in Anführungszeichen stehen

                    Und das nächste mal gibst die evaluierte Abfrage aus, dann hättest du auch selber gesehen, dass nichts (vernünftiges) drin steht.
                    Dass diese Abfragen lokal gelaufen sein sollen, ist reine Erfindung.
                    Gruss
                    H2O

                    Kommentar


                    • #11
                      Ist ja nicht so, dass ich noch nicht auf die Reservierten Wörter hingewiesen hätte, aber egal...

                      (ne, H20 )
                      ICH BIN ICH!!!

                      Kommentar


                      • #12
                        Original geschrieben von H2O
                        Indizes von assotiatven Arrays sind Strings, bei dir sind es (vermutlich undefinierte) Konstanten.
                        Das man die Indizes in Arrays eigentlich anders schreibt ist mir auch klar, nur wie wäre es denn in diesem Beispiel korrekt? Die Anfrage steht ja zuerst schon einmal in einfachen Klammern - als Argument der query()-Methode. Dann stehen die Values in Klammern. Wenn ich nun die Indizes wieder in einfachen Klammern schreibe, kann das ja auch nicht gehen... oder wie, oder was?

                        PHP-Code:
                            $db->query('
                                INSERT INTO fields (title, description, path, status, counter) 
                                VALUES ("$_POST['
                        title']", "$_POST['description']", "$_POST['path']", 1, 0)
                            '
                        ); 

                        Assotiatven Arrays müssen innerhalb von Strings entweder mit dem Verkettungs-Operator eingefügt werden, oder in {} stehen
                        Wie sieht das genau aus? Wo finde ich denn mal Beispiele für sowas?


                        Nummerische Argumente sollten nicht in Anführungszeichen stehen
                        Okay, so wird die Zahl als String behandelt, aber das ist doch in PHP kein Fehler, oder?


                        Und das nächste mal gibst die evaluierte Abfrage aus, dann hättest du auch selber gesehen, dass nichts (vernünftiges) drin steht.
                        Wie gebe ich eine evaluierte Abfrage aus?


                        Dass diese Abfragen lokal gelaufen sein sollen, ist reine Erfindung.
                        Das läuft auf meiner lokalen MAMP-Installation so. Auf jeden Fall...
                        Zuletzt geändert von hugostrange; 15.01.2008, 17:42.

                        Kommentar


                        • #13
                          Lass dich von H20 mal nicht kirre machen. Er hat zwar recht, denn all das gehört zu den Grundlagen von sauberen Programmieren. Aber auf solche Grundlagen darf ich hier nicht mehr hinweisen. (sollte eigentlich auch überflüssig sein, da hat der Kropff recht.)

                          Und jetzt informiere dich endlich über die reservierten Wörter. Das war jetzt mein dritter und letzter Hinweis. Danke!
                          ICH BIN ICH!!!

                          Kommentar


                          • #14
                            Original geschrieben von IchBinIch

                            Und jetzt informiere dich endlich über die reservierten Wörter. Das war jetzt mein dritter und letzter Hinweis. Danke!
                            Danke, schon dabei...

                            Kommentar

                            Lädt...
                            X