php PDO锁表

php PDO锁表,php,mysql,pdo,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

在这个脚本中,我有:

$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连接的类


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

您的语法有点不正确。在每个表名后添加
写入

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

你怎么知道脚本在同一时间执行多次?对于初学者来说,它被设计为在同一时间执行多次。在此之后,我可以看到数据库中的数据是错误的:)如果没有多个脚本实例执行,并且如果锁表有效,情况就不会是这样:)您的用户有权限锁表吗?是的,也检查了!