2012-10-20 127 views
7

這裏是我的情況:如何檢查UPDATE mysqli查詢是否正確執行?

$sql = 'UPDATE user SET password = ? WHERE username = ? AND password = ?'; 
if($stmt->prepare($sql)) { 
    $stmt->bind_param('sss', $newPass, $_SESSION['username'], $oldPass); 
    $stmt->execute(); 
} 

現在,我怎麼能看到,如果執行成功更新查詢?更確切地說,我怎樣才能看到舊密碼和用戶名是否正確,以便我可以存儲新密碼? 我做這個嘗試:

$res = $stmt->execute(); 
echo 'Result: '.$res; 

但我總是得到:

Result: 1 

即使舊密碼不正確。

回答

13

不更新任何行的查詢不是錯誤條件。這只是一個成功的查詢,並沒有改變任何東西。要查看更新是否確實改變了任何內容,您必須使用mysqli_affected_rows()

+0

太好了,謝謝! – Dim13i

+0

另一個不錯的選擇是[$ mysqli-> info](http://php.net/manual/en/mysqli.info.php),我使用它來反饋「UPDATE」查詢。 –

2

嘗試使用mysqli_affected_rows()以獲取受影響的行數。

2

您需要使用您正在使用的MySQL擴展的affected_rows函數。如果查詢因爲沒有行匹配而失敗,則返回0;如果發生錯誤,則返回-1;或者顯示已更改的行數的正數。

0
mysqli_query($link, "UPDATE Language SET Status=1 WHERE Percentage > 50"); 
printf("Affected rows (UPDATE): %d\n", mysqli_affected_rows($link)); 

試試看。

+0

提供解釋如何工作的解釋可能是一個好主意,因爲將來閱讀此答案的用戶可能無法理解它,或者有理解它的上下文。 – orangething

+0

好吧你是對的,但在這種情況下,我的答案基於第一個問題 –