2013-05-06 39 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