我開始編寫一個簡單的腳本,該腳本從CSV中讀取ID,然後從CSV中爲所有用戶設置相同的電子郵件地址(在數據庫中)。夠簡單...(使用PDO) 從CSV讀取數據是可以的。這是更新的一部分,讓我頭痛。MySQL UPDATE返回值
$sSQL = "UPDATE users SET email = '[email protected]' WHERE CUSTOMER_ID = '%s'";
foreach ($aUsers as $sCustomerId) {
$sQuery = sprintf($sSQL, $sCustomerId);
if (!$db->exec($sQuery)) {
printf("There was an error updating user %s in database.<br>", $sCustomerId);
$aFailed[] = $sCustomerId;
} else {
printf("User %s successfully updated.<br>", $sCustomerId);
$success++;
}
}
腳本真的很容易。問題是如果mysql已經擁有該電子郵件地址,那麼mysql不會更新數據庫中的用戶,因此它將返回0(0行受影響,這沒關係)。如果在更新過程中發生錯誤,那麼mysql也會返回同樣的結果。這就是讓我瘋狂的原因。我如何區分「不受影響的行」和「發生錯誤」。我嘗試使用不同的PDO :: ATTR_ERRMODE,並期待至少在錯誤的情況下,它會拋出一個異常(哪種PDO :: ERRMODE_EXCEPTION應該這樣做),我可以比捕獲,但它不會。然後我要使用
if ($db->exec($sQuery) === FALSE)
也不起作用。該腳本現在可行,但問題是我無法將「錯誤」與「無受影響的行」區分開來。
這是mysql中的新行爲嗎?因爲我不記得寫更新這樣簡單的腳本當具有過去那樣的問題......
手冊說:「如果你設置爲它當前的值的列時,MySQL注意到這一點,並沒有更新「。
您是否嘗試過PDOStatement :: rowCount?它通過查詢返回受影響的行。因此請檢查它是否爲0或更多:) – Refilon 2014-12-19 11:20:03
更新後應檢查「$ db-> errorCode()」以查看是否發生錯誤 – 2014-12-19 11:21:31