为什么没有用这个 PHP 代码写入 Sqlite3 数据库?

Why is nothing written in the Sqlite3 database with this PHP code?

我通常使用 new PDO('sqlite:test.log'); 的 PDO 来编写 PHP 的 Sqlite3 数据库。

现在,为了进行性能比较,我想尝试使用 SQLite3 PHP class :

$db = new SQLite3('test.db');
$db->query("CREATE TABLE IF NOT EXISTS log (a, b, d);");
$stmt = $db->prepare("INSERT INTO log VALUES (?, ?, ?);");
$stmt->execute(array("a", date("Y-m-d\TH:i:sO"), 123));

不幸的是,这段代码执行后,似乎什么也没有写:SELECT * from log没有给出行。

我的代码有什么问题?

我也试过$db->commit();$db->query('COMMIT;')都没有成功。


上下文:我通常使用 PDO,但我注意到一个简单的 1) 打开数据库,2) 添加一行,3) 提交和关闭需要大约 50 毫秒。所以我很好奇用 Sqlite3 class 代替 PDO 是否更好。结果:相同:~ 50 毫秒。

与 PDO 不同,您不能在 $stmt->execute() 的参数中提供参数,您必须调用 $stmt->bindParam()$stmt->bindValue()

$stmt = $db->prepare("INSERT INTO log VALUES (?, ?, ?);");
$stmt->bindValue(1, "a");
$stmt->bindValue(2, date("Y-m-d\TH:i:sO"));
$stmt->bindValue(3, 123);
$stmt->execute();

如果你有一个值数组,你可以循环调用bindValue()

foreach (array("a", date("Y-m-d\TH:i:sO"), 123) AS $i => $value) {
    $stmt->bindValue($i+1, $value);
}