我有这个sqlite3 db:
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()
我也尝试过创建像'VALUES(...,...),VALUES(...,...)这样的SQL查询,但是得到了同样的错误:
我做错了什么?
答案 0 :(得分: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();