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 时,您正在使用两个不同的连接。使用一个或另一个。(只有锁定的连接(这里是mysql)才能写。)

在这里,您可以锁定另一个连接以防止写入。

于 2013-04-18T13:58:36.957 回答
1

您无法执行INSERT查询,因为该LOCK语句是在不同的 mysql 会话上执行的。

据我所知,您有 2 个 mysql 会话:
1. 使用内置 mysql 函数,如mysql_query
2. 使用库连接到 mysql$stmt->execute();

所以尝试使用相同的mysql会话。

于 2013-04-18T13:58:47.800 回答