2013-05-06 38 views
1

我有4个查询在邮件上运行。我注意到,如果第一个查询之一没有任何工作要做,并不是所有的查询都能正常工作。了解php与mysql_error

这里是我的查询

mysql_query("UPDATE invoice SET company='$company' WHERE company='$oldcompanyname'") or die(mysql_error()); 

mysql_query("UPDATE bill SET customer='$company' WHERE customer='$oldcompanyname'") or die(mysql_error()); 

mysql_query("UPDATE project SET customer='$company' WHERE customer='$oldcompanyname'") or die(mysql_error()); 

mysql_query("INSERT INTO activity_log (item, date) VALUES ('Customer Editted', NOW()) ") or die(mysql_error()); 

给你举一个例子,第一个运行正常。但第二个没有工作要做,因为该领域的数据不存在。第三和第四应该运行,但他们没有。

我一直习惯于用“or die(mysql_error());”来追加我的查询。但我现在认为这不是最好的选择。但即使中间的一个人没有工作要做,剩余的查询是否应该运行?

如果有4项工作要完成,那么它工作正常。

+1

'死()'基本上退出脚本,你应该知道这个名字。所以如果第二个失败,脚本将停止执行,因此第三和第四个不会被执行! – HamZa 2013-05-06 23:37:35

+2

第二个不应该因为没有匹配的行而出现错误。 – Barmar 2013-05-06 23:38:57

+0

啊忘了说死是exit()的等价物,你可以发送一条消息给客户端,这就是为什么你使用mysql_error来显示错误 – HamZa 2013-05-06 23:40:02

回答

4

@HamZa DzCyber​​DeV是对的,如果您的第一个查询失败,那么die()调用将使您的脚本的其余部分停止执行,就像exit()一样执行。在需要仅在另一个查询完成时才需要运行查询的情况下,移除die语句并使用if/else会更好。

$result = mysql_query("UPDATE invoice SET company='$company' WHERE company='$oldcompanyname'"); 
if ($result !== false) { 
    // do something here or execute the next query 
} 

此外,请勿在新代码http://bit.ly/phpmsql中使用mysql_ *函数。他们不再被维护并且被正式弃用https://wiki.php.net/rfc/mysql_deprecation。了解有关准备报表http://j.mp/T9hLWi,而使用PDO http://php.net/pdo或MySQLi http://php.net/mysqli

+2

但是没有任何事情要做的查询不应该导致'mysql_query'失败。只有在查询中有错误时才会失败。这通常是由于程序中的错误,例如不能正确地转义输入,并且适合死亡。 – Barmar 2013-05-06 23:44:23

+0

嗯。不是标题,似乎现在正在工作,不知道为什么。我关闭并重新打开浏览器。它可以与会话有任何关系吗? – Tom 2013-05-07 00:08:29

+0

@Barmar你是对的。如果期望某种数据类型,例如尝试将字符串移入int字段等,或者超出其数据类型长度,则它也可能失败。他没有检查我们可以在他的代码中看到的发布数据。 – Revent 2013-05-07 00:45:29

1

这听起来像你应该正常化你的数据。如果你在你的客户表基于关的ID的链接,你可能只是做:

UPDATE `company` SET name='$new_name' WHERE company_id=$id 

,然后在发票/账单/项目表,你会对COMPANY_ID一个外键,而不是立足而过公司名。

+0

感谢您的回复。我想我可能会爬上一个答案。死后是否有可能我的头重定向可以踢进去?我的脚本顶部有以下内容。 if($ _ SERVER ['REQUEST_METHOD'] ==“POST”){ header(“Location:viewcustomers.php”); } – Tom 2013-05-07 00:02:06

+0

也许吧。有些浏览器在看到标题重定向后立即重定向,有些则等待完整响应(AFAIK) – dave 2013-05-07 00:36:57

+0

无论哪种方式,如果存在重定向,内容将不会显示。直到您成功更新所有内容后,才能发送标题。 – Barmar 2013-05-07 01:06:44