PDO Sqlite错误5:数据库锁定

时间:2016-12-26 19:16:35

标签: php sqlite pdo

我一直在尝试使用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;
    }

} 

很抱歉,如果有一个简单的解决方案,我对此很新。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以在PDOStatement对象上使用closeCursor()方法释放与数据库的连接,以便可以执行该语句。 You can refer to the PHP manual.