2016-12-26 11 views
0

私はsqliteデータベース(php with PDO)を使用しようとしていましたが、問題が発生しています。一般的に、私はしばらくの間、試したPDO Sqliteエラー5:データベースがロックされました

SQLSTATE[HY000]: General error: 5 database is locked

をコマンドが動作し、すべてが(ファイルを格納含む)大丈夫ですが、私は(単純化されている)これらの2つのコマンドを実行したときに、何らかの理由で、私はエラーを取得しますしかし、何が間違っていても修正することはできませんでした。コードは以下の通りです。私がやった

もの:
   は本当に助けない((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

'closeCursor()'を使ってみましたか? – frz3993

+0

@ frz3993ありがとう!その存在を知らなかった。コメントを回答に変更すると、それをそのようにマークします –

答えて

1

PDOStatementオブジェクトでcloseCursor()メソッドを使用すると、データベースへの接続を解放してステートメントを実行できます。 You can refer to the PHP manual.

関連する問題