2012-10-20 27 views
7

Đây là trường hợp của tôi:Làm cách nào để kiểm tra xem truy vấn mysqli UPDATE có được thực hiện đúng không?

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

Bây giờ, làm thế nào tôi có thể thấy nếu truy vấn UPDATE được thực hiện thành công? Và chính xác hơn làm cách nào tôi có thể biết mật khẩu cũ và tên người dùng có chính xác để tôi có thể lưu mật khẩu mới không? Tôi đã thử bằng cách làm này:

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

Nhưng tôi luôn nhận được:

Result: 1 

ngay cả khi mật khẩu cũ là không đúng.

Trả lời

13

Truy vấn cập nhật không có hàng nào KHÔNG phải là điều kiện lỗi. Nó chỉ đơn giản là một truy vấn thành công mà không thay đổi bất cứ điều gì. Để xem liệu bản cập nhật có thực sự thay đổi gì không, bạn phải sử dụng mysqli_affected_rows()

+0

Tuyệt vời, cảm ơn bạn !! – Dim13i

+0

Một lựa chọn tuyệt vời khác là [$ mysqli-> info] (http://php.net/manual/en/mysqli.info.php), mà tôi sử dụng để phản hồi về các truy vấn 'UPDATE'. –

2

Hãy thử sử dụng mysqli_affected_rows() để nhận số hàng bị ảnh hưởng.

2

Bạn cần sử dụng chức năng affected_rows của tiện ích mở rộng MySQL mà bạn đang sử dụng. Điều này sẽ trả về 0 nếu truy vấn thất bại vì không có hàng nào phù hợp, -1 nếu xảy ra lỗi hoặc số dương cho biết số hàng đã bị thay đổi.

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

Hãy thử điều đó.

+0

Có thể là một ý tưởng tốt để cung cấp giải thích về cách chính xác hoạt động này, vì người dùng đọc câu trả lời này trong tương lai có thể không hiểu hoặc có ngữ cảnh cần thiết để hiểu nó. – orangething

+0

Đồng ý, nhưng trong trường hợp này, câu trả lời của tôi dựa trên câu hỏi đầu tiên –

Các vấn đề liên quan