我发现我无法在表锁下执行预准备语句,页面锁定就像命令等待释放一样,我必须手动终止锁定。
这只是一个示例:
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's :)
谢谢。
答案 0 :(得分:5)
mysql_query
但$mysqli->prepare
您将表格锁定在由mysql_connect
确定的连接中
难怪桌子被锁定在所有其他连接中,包括mysqli创建的连接。
答案 1 :(得分:1)
使用mysqli和mysql时,您使用两个不同的连接。使用一个或另一个。 (只有已锁定的连接(本例中为mysql)才能写入。)
在这里你可以锁定其他连接。
答案 2 :(得分:1)
您无法执行INSERT
查询,因为LOCK
语句是在不同的mysql会话上执行的。
据我所知,你有2个mysql会话:
1.使用内置的mysql函数,如mysql_query
2.使用库连接到mysql $stmt->execute();
所以尝试使用相同的 mysql会话。