2011-01-13 23 views
3

Ich habe eine große Menge an Daten, die aus einem PHP-Skript generiert werden und in eine Datenbank eingefügt werden müssen. Ich habe verschiedene Lösungen mit unterschiedlichen Ergebnissen ausprobiert, aber die aktuelle Lösung (und die, die ich für die beste halten sollte) ist, dass ich die Daten in einer CSV-Datei erzeuge und dann mit der folgenden Abfrage in die Datenbank einfüge:mysqli_query gibt false mit Fehlercode 0 zurück, aber die Abfrage ist erfolgreich

LOAD DATA LOCAL INFILE 'myfile.csv' INTO TABLE t1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "'" 

ich benutze CodeIgniter als PHP-Framework, und nachdem die Abfrage im auf eine Fehlerseite umgeleitet ausgeführt hat, die nur sagt

Ein Datenbankfehler aufgetreten

Fehlernummer: 0

Es gibt keine Fehlermeldung oder irgendetwas.

Ich habe durch den Code trat aber alles, was ich finden kann, ist, dass mysqli_query() false zurückgibt und später mysqli_errno() 0 zurück und mysqli_error() einen leeren String zurück.

Allerdings, die Abfrage ist tatsächlich gelungen und wenn ich in die Datenbank schaue, kann ich sehen, dass alle Daten aus der CSV-Datei erfolgreich eingefügt wurden. Ist dieses Verhalten zu erwarten? Wenn ja, muss ich den CodeIgniter-Code ein wenig hacken oder direkt mysqli_query() anrufen, anstatt das Framework zu durchlaufen.

Ich habe auch genau die gleiche Abfrage in MySQL Workbench ausgeführt, und ich bekomme dort keine Fehlermeldung.

+1

Bitte zeigen Sie den Code, den Sie verwenden, um die Abfrage auszuführen –

+1

Dies ist der Code $ this-> db-> query ($ query); – Johan

+1

Nein, ich meine den vollständigen Codeblock einschließlich des Teils, an dem Sie die Fehlermeldung ausgeben. Sie können es in die Frage bearbeiten * Edit *: Ah, ich sehe, dass Sie CodeIgniter verwenden, der die Dinge wahrscheinlich ein bisschen schwieriger macht. Versuchen Sie dennoch, das zu veröffentlichen, was Sie können –

Antwort

0

Ich habe noch nie versucht, eine LOAD INFILE von PHP vor, aber eine schnelle Google kam mit der Funktion mysqli_set_local_infile_handler(). Vielleicht helfen die Beispiele/Kommentare?

Edit: Meine Theorie ist die Abfrage erwartet eine Anzahl von Zeilen Rückgabewert, und die Verbindung gibt keine Zahlen zurück. Während also die Abfrage am Ende von MySQL erfolgreich ist, erwartet PHP eine Zahl> 0, erhält sie aber nicht. Es meldet also einen Fehler ohne Fehlermeldung.

Der infile_handler würde die Anzahl der eingefügten Zeilen zurückgeben.

+0

Ich habe einen schnellen Test gemacht, aber nach dem Aufruf von mysqli_set_local_infile_handler() stirbt das Skript einfach ab. Ich könnte etwas verpasst haben – Johan

1

Ich hatte genau das gleiche Problem, als ich erkannte, dass ich nicht mit der Datenbank verbunden war.

Ich rief require_once('connect.php'), aber das war das zweite Mal in dem Code, den ich require_once verwendet, so dass PHP nicht in der Verbindung gezogen.

Ändern der require_once zu beheben dieses Problem für mich behoben.

Verwandte Themen