我有一个 PHP 脚本,它按所示顺序执行以下操作:
- 连接到 MySQL 数据库
- 检索单行数据
- 关闭 MySQL 数据库连接
- 连接到本地文件系统上的 SQLite 数据库
- 将数据行插入 SQLite 数据库
- 关闭 SQLite 数据库连接
我使用 PDO 作为 MySQL 和 SQLite 的工具。这是插入的代码:
$sqlite = new PDO('sqlite:activity.sqlite');
$sqlite->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$lite = <<<LITE
INSERT INTO Transactions (Date,Transactions,ActiveMembers,Amount)
VALUES
('$day',
'$trans',
'$active',
'$amount');
LITE;
try
{
$sqlite->exec($lite);
}
catch (PDOException $e)
{
die($e->getMessage());
}
(请原谅在查询中使用变量,而不是适当的准备语句;我删除了绑定参数以查看是否是问题所在)
使用其他工具(Firefox 的 SQLite 管理器,Windows 的 SQLite 数据库浏览器),我能够访问数据库并写入它。
这个脚本是唯一触及这个特定数据库的东西。数据库文件的权限是777
. 当脚本运行时,没有其他任何东西会打开它或其包含的目录。
运行脚本时(使用php -f
),尝试插入 SQLite 数据库的部分会创建日志文件,大约需要 10-15 秒,然后返回错误SQLSTATE[HY000]: General error: 5 database is locked
。
那么,我的问题是:
从命令行运行 PHP 脚本是否会阻止与 SQLite 数据库的交互?如果是这样,是什么?如果不是,这里可能是什么问题?