用mysql_error理解php die

时间:2013-05-06 23:35:15

标签: php mysql forms

我有4个查询在帖子上运行。我注意到,如果其中一个查询没有工作要做,并非所有查询都有效。

以下是我的查询

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());

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

我一直习惯于用“或者死(mysql_error())”附加我的查询;“但我现在想,这不是最好的选择。但是,即使中间的那个查询没有工作要做,其余的查询也不应该运行吗?

如果要在所有4中完成工作,那么它可以正常工作。

2 个答案:

答案 0 :(得分: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
}

此外,请勿在新代码Why shouldn't I use mysql_* functions in PHP?中使用mysql_ *函数。它们不再维护,并且已被正式弃用https://wiki.php.net/rfc/mysql_deprecation。请改为了解准备好的陈述https://en.wikipedia.org/wiki/Prepared_statement,并使用PDO http://php.net/pdo或MySQLi http://php.net/mysqli

答案 1 :(得分:1)

这听起来像你应该规范化你的数据。如果您的客户表基于ID链接,您可以这样做:

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

然后在您的发票/账单/项目表中,您将拥有company_id的外键,而不是基于company_name。