2009-05-28 56 views
44

Sử dụng PHP, tôi đang cố xóa một bản ghi, nhưng tôi muốn kiểm tra xem nó có thành công hay không. Có bất kỳ thứ gì được trả lại từ một thành công DELETE FROM foo where bar = 'stuff' không?Một sự trở lại thành công của MySQL DELETE là gì? Cách kiểm tra xem DELETE có thành công không?

Ngoài ra, bạn có biết cách nào khác để kiểm tra xem DELETE có thành công không? Hay tôi tốt hơn chỉ cần đảm bảo hàng tồn tại trước khi tôi xóa nó? Tôi đang cố gắng tránh một truy vấn khác nếu có thể.

Trả lời

53

Giả sử bạn đang sử dụng mysql_query:

Đối với các loại khác của câu lệnh SQL, INSERT, UPDATE, DELETE , DROP, vv, mysql_query() trả về TRUE về thành công hay FALSE về lỗi.

Nếu bạn đang sử dụng PDO::exec, sau đó hướng dẫn nói điều này:

PDO :: exec() trả về số hàng đã được thay đổi hoặc bị xóa bởi các câu lệnh SQL bạn phát hành. Nếu không có hàng bị ảnh hưởng, PDO :: exec() trả về 0.

Không muốn trả lời snipe, nhưng vì đây được chọn là câu trả lời, tôi nên lưu ý mysql_query rằng sẽ trở lại TRUE ngay cả khi truy vấn đã không thực sự loại bỏ bất cứ điều gì. Bạn nên sử dụng mysql_affected_rows để kiểm tra điều đó.

+4

"Không muốn trả lời snipe" Ồ không! Không phải điểm quý giá của tôi! =) – biggusjimmus

+0

+1 cho mysql_affected_rows –

+1

Nếu bạn đang sử dụng PDO :: execute() để lấy số hàng bị ảnh hưởng, bạn nên sử dụng PDO :: rowCount() – Alan

32

Ngoài ra, nếu bạn quan tâm đến số lượng hàng mà bị ảnh hưởng:

[Sử dụng] mysql_affected_rows() để tìm hiểu có bao nhiêu hàng bị ảnh hưởng bởi một DELETE, INSERT, REPLACE, hoặc tuyên bố UPDATE.

+2

Đánh tôi! Kiểm tra rằng điều này là> 0 là hữu ích, vì mysql_query() sẽ trả về TRUE nếu truy vấn được tạo đúng cách nhưng không xóa bất cứ điều gì. – ceejayoz

+0

@ceejayoz Bạn có thể làm rõ rằng nó không xóa bất cứ điều gì vì không có gì để xóa hoặc vì một số lỗi? – MaxZoom

+0

@MaxZoom Nếu có lỗi, 'mysql_query' sẽ trả về' FALSE'. Nếu không có gì để xóa, 'mysql_query' sẽ trả về' TRUE' và 'mysql_affected_rows' sẽ là' 0'. Điều đó nói rằng, bạn không nên sử dụng 'mysql_query' ** nữa **. – ceejayoz

13

bạn có thể thử này cho mã php của bạn, đặt sau khi truy vấn của bạn chạy:

if (mysql_affected_rows() > 0) { 
    echo "You have successfully updated your data.<br><br>"; 
} 
else { 
    echo "The data you submitted matched the current data so nothing was changed.<br><br>"; 
} 
Các vấn đề liên quan