单步执行PHP会更改MySQL结果

时间:2012-09-27 09:29:11

标签: php mysql

在普通的PHP 5.3中,我有一些代码使用MySQL首先删除一些旧记录,记录日志,执行一些小操作然后添加新的替换记录。

delete命令如下所示:

DELETE FROM `rtable` WHERE `UserName`='%s';

add命令如下所示:

INSERT INTO `table` (`UserName`,`Attribute`,`op`,`Value`) VALUES ('%s','%s','%s','%s');

奇怪的是,插入命令在正常运行时似乎没有执行,但是如果我启用调试器并逐步执行一行,它似乎可以正常工作。同样,如果我在删除命令后插入两秒钟的睡眠命令。它似乎工作。我假设插入命令正在运行-before-删除命令,因此删除命令也会删除新记录。

如何让PHP在继续执行insert命令之前等待删除操作完成?

2 个答案:

答案 0 :(得分:1)

这听起来很奇怪。 你碰巧有一个复制的数据库集群吗? 另外,你检查mysql_query或其他命令的返回值并打印错误消息(当然不推荐用于生产中的脚本)?

答案 1 :(得分:1)

我不完全确定PHP如何处理进程以及如何运行连续查询,但如果您想确保将删除封装在事务中,则可以使用PDO执行此操作:

$dbh->beginTransaction();
$sth = $dbh->exec("DELETE FROM `rtable` WHERE `UserName`='%s'");
$dbh->commit();
// You could also pop a transaction around the inserts 
// in case another page tries to do the same
$sth = $dbh->exec("INSERT INTO `table` 
    (`UserName`,`Attribute`,`op`,`Value`) 
    VALUES ('%s','%s','%s','%s')");

BTW:我冒昧地在你的查询中将单引号更正为反引号。