簡體   English   中英

准備好的語句未在鎖定下執行

[英]Prepared statement not executing under lock

我發現我無法在表鎖下執行准備好的語句,該頁面被鎖定,就像命令正在等待釋放一樣,我必須手動取消該鎖。

這只是一個例子:

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 :)

謝謝。

mysql_query$mysqli->prepare

您將表鎖定在mysql_connect建立的mysql_connect
難怪該表被鎖定在所有其他連接中,包括由mysqli創建的連接。

當您使用mysqli和mysql時,您正在使用兩個不同的連接。 使用一個或另一個。 (只有鎖定的連接(在這種情況下為mysql)才可以寫入。)

在這里,您可以鎖定其他連接以防止寫入。

您不能執行INSERT查詢,因為LOCK語句是在另一個mysql會話上執行的。

從我可以告訴你的2 mysql會話:
1.使用內置的mysql函數,例如mysql_query
2.使用一個庫連接到mysql $stmt->execute();

因此,請嘗試使用相同的 mysql會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM