php PDO锁表

时间:2013-06-30 18:25:12

标签: php mysql pdo

在这个脚本中我有:

$db = new PDO('mysql:host=localhost; dbname=name; charset=utf8', 'user', 'pass');
$db -> exec('LOCK TABLES `table1`, `table2` WRITE');
// Do some stuff here
$db -> exec('UNLOCK TABLES');

问题是这些表似乎没有被锁定。脚本的多个实例同时执行。在

// Do something here

代码仍然无法像LOCK TABLES语句那样以原子方式执行操作。

我做错了什么?

另外我注意到虽然我没有显式锁定我使用的其他表(例如table3),但我仍然可以读/写它们。根据mySQL手册,这是不可能的。

修改

// Do some stuff here代码实例化了一些执行数据库工作但共享相同$db PDO连接的类。

这不应该是我理解的问题的原因,正是因为它们共享相同的连接。锁表语句应该由它们“继承”。

1 个答案:

答案 0 :(得分:0)

你的语法有点偏。在每个表名后添加WRITE

$db -> exec('LOCK TABLES `table1` WRITE, `table2` WRITE');