2010-12-16 10 views
1

Ich habe diese sqlite3 db:Multiple INSERT-Abfragen mit PDO & SQLite

CREATE TABLE links (
id INTEGER PRIMARY KEY AUTOINCREMENT, 
name TEXT UNIQUE, 
link1 TEXT, 
link2 TEXT, 
link3 TEXT 
); 

Und ich versuche mehrere Einträge in der gleichen Abfrage einfügen, dies ist mein Code:

$db = new PDO('sqlite:db.sqlite'); 

$sql = "INSERT INTO links VALUES"; 

$filelines = file('filename'); 

foreach($filelines as $key => $line) 
{ 
if(count($filelines)-1==$key) 
    $sql .= "(NULL, '".trim($line)."', '', '', '');"; 
else 
    $sql .= "(NULL, '".trim($line)."', '', '', ''),"; 
} 

$insert = $db->prepare($sql); 

$insert->execute(); 

Einzeleinsätze funktioniert gut, aber mit diesem Code, den ich die pHP-Fehlermeldung erhalten:

Aufruf eine Member-Funktion ausführen() auf einem nicht-Objekt

Ich habe auch versucht, die SQL-Abfrage erstellen wie ‚VALUES (..., ...) VALUES (..., ...), ... aber die gleichen Fehler:

Was mache ich falsch?

Antwort

2

SQLite unterstützt die Syntax VALUES (...), (...), (...) nicht (siehe the docs). Sie müssen also nur eine Zeile pro INSERT Abfrage ausführen ...

Der Grund für den Fehler selbst ist, dass es einen Abfragefehler gibt, PDO::prepare()returns false. Sie sollten es überprüfen, um sicherzustellen das ->prepare() Anruf gearbeitet:

$insert = $db->prepare($sql); 

if (!$insert) { 
    die($db->errorInfo()); 
    // Or you could throw an exception, or otherwise handle the error... 
} 

$insert->execute(); 
+0

http://www.sqlite.org/lang_insert.html zeigt, dass mehrere Werte sollten in der Lage eingesetzt werden. Aber wenn ich es mit SQLite3 und PHP teste, scheint es nicht. – Justin

+0

@Justin Das ist, weil es in SQLite 3.7.11 hinzugefügt wurde und aktuelle Versionen eine ältere Version haben: http://stackoverflow.com/a/19340769/736162 – Andrea