首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >准备好的语句未在锁下执行

准备好的语句未在锁下执行
EN

Stack Overflow用户
提问于 2013-04-18 21:55:35
回答 3查看 948关注 0票数 0

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

这只是一个示例:

代码语言:javascript
复制
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 :)

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2013-04-18 21:57:16

mysql_query而不是$mysqli->prepare

您正在由mysql_connect建立的连接中锁定表

难怪表在所有其他连接中被锁定,包括由mysqli创建的一个连接。

票数 5
EN

Stack Overflow用户

发布于 2013-04-18 21:58:37

当您使用mysqli和mysql时,您使用的是两种不同的连接。使用其中一个或另一个。(只有锁定的连接(本例中为mysql)才能写入。)

在这里,您锁定了另一个连接,使其不能写入。

票数 1
EN

Stack Overflow用户

发布于 2013-04-18 21:58:48

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

据我所知,您有两个mysql会话:

使用mysql_query

  • using等内置mysql函数连接到mysql $stmt->execute();

因此,尝试使用与相同的 mysql会话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16084938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档