[英]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.