【发布时间】:2020-01-07 19:06:38
【问题描述】:
我正在用 PHP 中的以下语句打开一个 SQLiteDB 运行良好。
$db2 = new SQLite3("/home/pi/ion.sqb", SQLITE3_OPEN_READONLY);
$resu2 = $db2->query("select * from test where name = 'Hans'");
但是我不时遇到以下错误消息 :: SQLite 被锁定并且 PHP 脚本会通过以下致命消息杀死自己:
PHP Warning: SQLite3::query(): Unable to execute statement: database is locked in /home/pi/ion.sqb on line 559
PHP Fatal error: Uncaught Error: Call to a member function fetchArray() on boolean in /home/pi/dbc.php:560
Stack trace:
#0 {main}
thrown in /home/pi/dbc.php on line 560
我试图检查数据库是否被锁定并跳过选择...但是没有成功:
$db2 = new SQLite3("/home/pi/ion.sqb", SQLITE3_OPEN_READONLY);
$resu2 = $db2->query("select * from test where name = 'Hans'");
if (!$db2) {
echo "DB DB-locked";
}
else{
$resu2 = $db2->query("select * from test where name = 'Hans'");
while ($dsatz2 = $resu2->fetchArray(SQLITE3_ASSOC))
...
您可以在已记录的 SQLite DB 中遇到的问题是已知的 .. 当任何其他句柄处于写入模式时,也适用于选择。
我怎样才能发现我的脚本遇到致命错误并自行结束?
PHP Fatal error: Uncaught Error: Call to a member function fetchArray() on boolean in /home/pi/dbc.php:560
Stack trace:
#0 {main}
thrown in /home/pi/dbc.php on line 560
【问题讨论】:
-
使用真正可以处理并发的数据库,例如:mariadb、postgres。您将无法以理智或高效的方式解决此问题。