1

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

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

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

如果在所有 4 中都有工作要做,那么它工作正常。

4

2 回答 2

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
}

另外,不要在新代码中使用 mysql_* 函数为什么我不应该在 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

于 2013-05-06T23:42:58.203 回答
1

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

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

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

于 2013-05-06T23:44:08.657 回答