微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP-Sqlite3,SQLSTATE [HY000]:一般错误:5个数据库已锁定

我有这个小测试脚本:

session_start();
session_write_close();
error_reporting(-1);
register_shutdown_function(function() {
    //echo 'shutdown';
});

$MAX = 120;
set_time_limit($MAX);
echo date('Y-m-d H:i:s').'<br>';
$m = microtime(true);
$file_db = new PDO('sqlite:'.dirname(__FILE__).'/test.sqlite3');
$file_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$file_db->exec("CREATE TABLE IF NOT EXISTS messages (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, message TEXT, time INTEGER)");

$d = date('U');
do
{
    $file_db->exec ('INSERT INTO messages VALUES (null, "titleee'.rand(1,9).'", "MESSAGEEEE'.rand(1,99).'", "'.rand(1,999).'")');
    if (date('U') - $d > $MAX/2)
    {
        break;
    }
} while (true);
$file_db = null;
echo 'ok: '.(microtime(true)-$m);

如果此命令在多个实例的浏览器中运行,则迟早会丢弃“ sqlSTATE [HY000]:常规错误:5数据库已锁定”异常.如何躲闪呢?

解决方法:

添加:$file_db-> exec之后的sleep(2)太多进程试图太快地插入到锁定表的数据库中.欢迎您尝试:实例化$file_db之后立即尝试$file_db-> query(“ SET LOCK MODE TO WAIT 120”).这应该使脚本等待最多两分钟的时间才能解锁表…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐