0

テーブルロックの下で準備済みステートメントを実行できないことがわかりました。コマンドが解放を待っているかのようにページがロックされ、ロックを手動で強制終了する必要があります。

これはほんの一例です:

mysql_query("LOCK TABLE TBL WRITE");

$stmt = $mysqli->prepare("INSERT INTO TBL (ID) VALUES (?)");
$stmt->bind_param("i", $nextID);
$stmt->execute();

mysql_query("UNLOCK TABLES");

これが当てはまる理由はありますか?準備されたステートメントを導入する前は、ロックなしでの実行と同様に正常に機能していました。
これは学習目的のためだけなので、ロックと自動インクリメント ID が必要な理由についてはコメントしないでください :)

ありがとうございました。

4

3 に答える 3

5

mysql_queryしかし $mysqli->prepare

によって確立された接続mysql_connect
でテーブルをロックしています mysqli によって作成されたものを含む、他のすべての接続でテーブルがロックされたのも不思議ではありません。

于 2013-04-18T13:57:15.980 に答える
1

mysqli AND mysql を使用する場合、2 つの異なる接続を使用しています。どちらか一方または他方を使用してください。(ロックした接続 (この場合は mysql) のみが書き込み可能です。)

ここで、他の接続を書き込みからロックします。

于 2013-04-18T13:58:36.957 に答える
1

ステートメントが別の mysql セッションで実行されているINSERTため、クエリを実行できません。LOCK

私が言えることから、2つのmysqlセッションがあります:
1.組み込みのmysql関数をmysql_query
使用する 2.ライブラリを使用してmysqlに接続する$stmt->execute();

したがって、同じmysql セッションを使用してみてください。

于 2013-04-18T13:58:47.800 に答える