PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP的SQLite3Stmt类是否会导致锁定问题?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用PHP 5.3.3(CentOS 6.5中的最新版本)作为Prefork的Apache模块运行.

我发现,如果脚本以某种方式用完了时间或内存,sqlite3数据库将永远锁定,直到重新启动Apache.

可重现的测试:

// Open a connection to the database.
$db = new sqlite3('/path/to/test.db');

// Get a reserved lock.
$db->exec('BEGIN IMMEDIATE transaCTION');

// Construct a prepared statement sqlite3Stmt object.
$st = $db->prepare('SELECT value FROM soMetable WHERE key=:key');

// Emulate the script running off the rails while calling the prepared statement.
while(true)
{
    $st->bindValue(':key', 1);
}

当然,如果运行此脚本,它将用完执行时间和/或内存.但是从那时起,数据库被原始的Apache进程锁定.在重新启动Apache之前,没有脚本可以对数据库进行另一个保留的锁定.

脚本终止后,PHP是否不应该关闭数据库连接?这是PHP中的错误吗?通过将其作为FastCGI进程运行是否可以解决

解决方法:

在内部,sqlite在数据库文件上使用POSIX咨询锁.

进程退出时,操作系统将清除此锁.
但是,只要具有活动事务的Apache进程仍在运行,此锁就会保留.

如果您的脚本行为不正确,则应以某种方式运行它们,使它们中止会杀死整个过程.

大佬总结

以上是大佬教程为你收集整理的PHP的SQLite3Stmt类是否会导致锁定问题?全部内容,希望文章能够帮你解决PHP的SQLite3Stmt类是否会导致锁定问题?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: