busyTimeout() 方法和相关的 API sqlite3_busy_timeout() 是连接级别的属性,影响整个连接,应该在连接打开后设置一次。不要设置为零,否则在调用 query、querySingle、prepare 或 execute 方法时会遇到“数据库繁忙”错误消息。还要确保 sqlite3 库已编译并定义了 HAVE_USLEEP,否则 busyTimeout() 只能以秒为单位超时。强烈建议在并发环境中使用非零超时调用 busyTimeout() 以提高可靠性。
(PHP 5 >= 5.3.3, PHP 7, PHP 8)
SQLite3::busyTimeout — 设置繁忙连接处理程序
milliseconds
休眠的毫秒数。将此值设置为小于或等于零的值将关闭已设置的超时处理程序。
busyTimeout() 方法和相关的 API sqlite3_busy_timeout() 是连接级别的属性,影响整个连接,应该在连接打开后设置一次。不要设置为零,否则在调用 query、querySingle、prepare 或 execute 方法时会遇到“数据库繁忙”错误消息。还要确保 sqlite3 库已编译并定义了 HAVE_USLEEP,否则 busyTimeout() 只能以秒为单位超时。强烈建议在并发环境中使用非零超时调用 busyTimeout() 以提高可靠性。
可以使用 PRAGMA 设置 busyTimeout(毫秒)
<?php
$db = new SQLite3('my.db');
$db->exec("PRAGMA busy_timeout=5000");
?>
对于 SQLite2 (https://php.net/manual/en/function.sqlite-busy-timeout.php),PHP 将数据库打开时的默认繁忙超时设置为 60 秒。
但是,这在 v3 中不会发生,必须手动完成。
我个人的经验是,当您必须执行连续的读/写提交并且文件长时间未被访问时,SQLite3 的默认值 0 不够。