2010-12-16 9 views
1

У меня есть эта sqlite3 децибел:Несколько запросов INSERT с использованием PDO & SQLite

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

И я пытаюсь вставить несколько записей в одном запросе, это мой код:

$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(); 

Одиночные вставки работает нормально, но с этим кодом я получаю ошибку php:

Вызов функции-члена execute() для необъекта

Я также попытался создать SQL-запрос типа «VALUES (..., ...), VALUES (..., ...), ... но получить ту же ошибку:

Что я делаю неправильно?

ответ

2

SQLite не поддерживает синтаксис VALUES (...), (...), (...) (см. the docs). Поэтому вам нужно сделать только одну строку за INSERT запрос ...

Причина самой ошибки заключается в том, что с ошибкой запроса PDO::prepare()returns false. Вы должны проверить это, чтобы убедиться, что ->prepare() вызов работал:

$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 показывает, что несколько значений должны быть в состоянии быть вставлен. Но когда я тестирую его с помощью SQLite3 и php, похоже, это не так. – Justin 2012-10-29 23:48:04

Смежные вопросы