准备好的声明不在锁定下执行

时间:2013-04-18 13:55:35

标签: php mysql prepared-statement

我发现我无法在表锁下执行预准备语句,页面锁定就像命令等待释放一样,我必须手动终止锁定。

这只是一个示例:

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

谢谢。

3 个答案:

答案 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会话。