在这上面抓我的头有一段时间了…
我有一个PDO对象
pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
我想用的
FOR UPDATE
有一些innodb表。阅读mysql文档,
更新
只有在以下情况下才会锁定读取行:
-
你在交易中
-
你是
不
在交易中
set autocommit=0
已发布
所以,我用
ATTR_AUTOCOMMIT
允许PDO对象锁定行。在这两种情况下,都会导致INSERT和UPDATE语句不适用。这些说法与
更新
它们只是用准备好的语句运行同一个PDO对象。
我的MySQL查询日志如下:
xxx Connect user@host
xxx Query set autocommit=0
xxx Query INSERT INTO foo_tbl (bar, baz) VALUES ('hello','world')
xxx Quit
php/pdo没有抱怨,但是从表中选择显示数据没有被写入。
我正在运行的查询已经运行了数千次;只有
自动提交
已进行更改。删除该选项将使所有内容重新工作。交易使用该选项工作正常
autocommit=0
也是。
是否需要对PDO对象进行其他调用(
commit()
正确地抱怨它不在一个事务中)使更改保持不变?基本上,我想要一个普通的PDO对象,但是可以选择为innodb表锁定事务之外的行(这里的背景说明为什么太长和无聊)。
我肯定这是我错过的愚蠢的东西
划痕头