我一直在尝试使用sqlite数据库(php with PDO),但一直遇到问题。通常命令工作,一切都很好(包括存储文件),但由于某些原因,当我运行这两个命令(已经简化),我得到错误
SQLSTATE [HY000]:常规错误:5数据库已锁定
我已经尝试了一段时间,但一直无法解决任何错误。代码如下。
我做过的事情:
试图在命令之间设置睡眠(2)
发现注释任何一个命令都会导致错误发生(这不会真正有用,因为两个命令都必须运行)
请注意(与我在查看类似问题时看到的其他问题不同)数据库在其他情况下正常运行。
$db = new MyDB();
$STH = $db->catchMistakes('SELECT PASSWORD FROM USERS WHERE USERNAME = ?', "test");
$STH->fetchColumn();
$db->catchMistakes("UPDATE ISSUES SET NAME = ? WHERE NUM = ?", ["test", "1"]);
这是MyDB的代码
public function catchMistakes($cmd, $params = []) {
if (!is_array($params)) {
$params = [$params];
}
try {
$DBH = new PDO("sqlite:" . DB);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$DBH->beginTransaction();
$query = $DBH->prepare($cmd);
$toReturn = $query->execute($params);
$DBH->commit();
return $query;
}
catch(PDOException $e) {
$DBH->rollback();
$error = $e->getMessage();
exit;
}
}
很抱歉,如果有一个简单的解决方案,我对此很新。任何帮助将不胜感激。
答案 0 :(得分:2)
您可以在PDOStatement对象上使用closeCursor()
方法释放与数据库的连接,以便可以执行该语句。 You can refer to the PHP manual.