我发现我不能在表锁下执行预准备语句,页面锁定,就像命令正在等待释放一样,我必须手动终止锁。
这只是一个示例:
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 :)
谢谢。
发布于 2013-04-18 21:57:16
mysql_query而不是$mysqli->prepare
您正在由mysql_connect建立的连接中锁定表
难怪表在所有其他连接中被锁定,包括由mysqli创建的一个连接。
发布于 2013-04-18 21:58:37
当您使用mysqli和mysql时,您使用的是两种不同的连接。使用其中一个或另一个。(只有锁定的连接(本例中为mysql)才能写入。)
在这里,您锁定了另一个连接,使其不能写入。
发布于 2013-04-18 21:58:48
您无法执行INSERT查询,因为LOCK语句是在不同的mysql会话上执行的。
据我所知,您有两个mysql会话:
使用mysql_query
$stmt->execute();的
因此,尝试使用与相同的 mysql会话。
https://stackoverflow.com/questions/16084938
复制相似问题