2012-03-26 64 views
0

如果我在同一个表上执行多个mysql查询,偶尔会有一些跳过。Mysql多个PHP查询,跳过

这是为什么?

例如:

<?php 
mysql_query("UPDATE `tb` SET `field` = '' WHERE `Id` = '$something'"); 
mysql_query("UPDATE `tb` SET `field2` = '' WHERE `Id` = '$something'"); 
mysql_query("UPDATE `tb` SET `field3` = '0' WHERE `Id` = '$something'"); 
?> 

有时查询之一将不会被执行?

这是为什么?

- 或者是我的服务器不是一般的MySQL有问题吗?

(很明显,我现在知道在同一个查询更新同一表,但在此之前,我很困惑,为什么它会发生,任何人都可以请解释?)

谢谢!看到

+0

你能向我们展示查询前后的代码吗? – F21 2012-03-26 12:30:38

+0

尝试'mysql_query(“...”)或死(mysql_error());'为了调试目的。我敢打赌,你的一些querys只是默默地失败。 PHP解释器通常不会跳过语句,MySQL DBS也不会随机忽略查询。 – Basti 2012-03-26 12:32:57

+0

为了调试目的,在每个查询后面尝试回显'mysql_error()'。这会告诉你,如果查询出了什么问题 – 2012-03-26 12:33:56

回答

0

调试你的代码,如果查询失败:

$result = mysql_query("UPDATE `tb` SET `field` = '' WHERE `Id` = '$something'"); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

$result = mysql_query("UPDATE `tb` SET `field2` = '' WHERE `Id` = '$something'"); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

$result = mysql_query("UPDATE `tb` SET `field3` = '0' WHERE `Id` = '$something'"); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 
0

使用以下方法来调试代码:

mysql_query("UPDATE `tb` SET `field` = '' WHERE `Id` = '$something'") or die(mysql_error()); 
mysql_query("UPDATE `tb` SET `field2` = '' WHERE `Id` = '$something'") or die(mysql_error()); 
mysql_query("UPDATE `tb` SET `field3` = '0' WHERE `Id` = '$something'") or die(mysql_error()); 

UPDATE

确保您使用的逃逸$something

$something = mysql_real_escape_string($something); 
3

你并不需要做3个查询,如果要更新同一行:

$q = " 
    UPDATE table 
    SET field = '', 
     field2 = '', 
     field3 = 0 
    WHERE Id = :id 
"; 
$statement = $pdo->prepare($q); 
$statement->bindParam(':id', $something, PDO::PARAM_INT); 
$statement->execute(); 

此外,你应该停止使用古老mysql_*功能。他们不再被维护,并且弃用程序有already begun

也许你应该避免使用10年以上的API,并学习这十年的东西:PDO Tutorial for MySQL Developers

+0

在谈论图书馆时,旧的并不是一件坏事,切勿触摸正在运行的系统。表达删除ext/mysql的愿望的帖子已近两年了,而且我也没有看到他们甚至用PDO的例子扩展了这些文档 – Basti 2012-03-26 13:35:22

+0

现在这就是技术的精神!! -.- – 2012-03-26 14:10:22

+2

@Basti:老是坏事,请记住[Comdomncy Kills](http://mylifeblogs.com/2011/ 10 /自满杀死/)...记住爱因斯坦所说的:*世界是一个危险的地方。不是因为邪恶的人;但是因为没有做任何事情的人。*所以,老是坏事,说*永远不要触摸正在运行的系统*是正确的疏忽。现在,采取预防措施,不要无缘无故地摆弄它,但如果有一个原因(在这种情况下有),绝对碰到一个正在运行的系统... – ircmaxell 2012-03-26 14:13:35