3

提示された順序で次のことを行う PHP スクリプトがあります。

  • MySQL データベースに接続する
  • 1 行のデータを取得する
  • MySQL データベース接続を閉じる
  • ローカル ファイル システム上の SQLite データベースに接続する
  • データの行を SQLite データベースに挿入します
  • SQLite データベース接続を閉じる

MySQL と SQLite の両方の手段として PDO を使用しています。挿入のコードは次のとおりです。

$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 Manager、Windows 用の SQLite Database Browser) を使用して、データベースにアクセスして書き込むことができます。

このスクリプトは、この特定のデータベースに触れる唯一のものです。データベース ファイルの権限は777. スクリプトの実行時に、それまたはそれを含むディレクトリを開くものは他にありません。

スクリプトを ( を使用してphp -f) 実行すると、SQLite データベースに挿入しようとする部分でジャーナル ファイルが作成され、約 10 ~ 15 秒かかり、エラーが返されますSQLSTATE[HY000]: General error: 5 database is locked

それでは、私の質問は次のとおりです。

コマンド ラインから PHP スクリプトを実行すると、SQLite データベースとのやり取りが妨げられることはありますか? もしそうなら、何?そうでない場合、ここで何が問題になる可能性がありますか?

4

2 に答える 2

1

必ず SQLite への接続をクリアしてください。つまり、コードの後に​​設定してください。

$sqlite = null;

http://php.net/manual/en/pdo.connections.phpを参照してください。

于 2012-10-23T14:37:32.933 に答える