Làm cách nào để tìm thấy bản cập nhật của tôi có thành công hay không? tôi cập nhật bằng cách sử dụng một nơi uniqueName = tên vì vậy tôi nên luôn luôn chỉ cập nhật 0 hàng hoặc 1. một cách tốt để kiểm tra xem tôi có cập nhật một hàng hay không?hàng bị ảnh hưởng trong bản cập nhật mysql với PHP
Trả lời
mysql_affected_rows()
sẽ trả về số hàng bị ảnh hưởng bởi bản cập nhật của bạn.
http://us.php.net/manual/en/function.mysql-affected-rows.php
Sử dụng mysql_affected_rows
.
này có thể trở về 0 nếu dữ liệu được cập nhật trong truy vấn cũng giống như đã có trong cơ sở dữ liệu, vì vậy nó có thể trả về 0 ngay cả khi truy vấn thành công nhưng 0 hàng đã được thay đổi. Nhưng tôi giả sử trường hợp sử dụng của bạn sẽ không có kịch bản này. – andho
Điều này có thể áp dụng, nhưng nếu bạn có thể viết "$ query = mysql_query ($ sql);", thì "$ query" sẽ chứa "1" nếu thành công, "0" nếu không. – NessDan
nếu truy vấn cập nhật của bạn đang ở trong một biến có tên $ query, bạn có thể làm;
$result = mysql_query($query);
if($result){
//succes!
} else {
//fail!
}
Hy vọng điều này sẽ hữu ích. Nếu bạn chỉ muốn biết nếu truy vấn của bạn đã được thực hiện thành công, điều này sẽ làm. Nếu bạn thực sự muốn biết có bao nhiêu hàng bị ảnh hưởng, hãy sử dụng các đề xuất khác.
Điều này sẽ chỉ trả về 'false' nếu truy vấn không đúng định dạng. Ngay cả khi 'UPDATE' hoạt động trên 0 hàng, điều này sẽ hiển thị" thành công! " – brianreavis
Điều này sẽ chỉ cho bạn biết liệu truy vấn đã được thực thi thành công hay không, không có bao nhiêu hàng bị ảnh hưởng. –
thử sử dụng mysql_affected_rows([$link])
Thực sự không có cách nào để biết điều đó. Giả sử bảng tbl_numbers (id, value) có các hàng (1, "one") và (2, "two");
$result1="update tbl_numbers set value='first' where id=1";
Nếu bạn kiểm tra $ result1 trong mệnh đề if nó trả về true và mysql_affected_rows() trả về 1.
Tuy nhiên, đối $result2="update tbl_numbers set value='two' where id=2";
Nếu bạn kiểm tra $ result2 trong mệnh đề if nó trả về true và mysql_affected_rows() trả về 0.
và, cho $result3="update tbl_numbers set value='three' where id=3";
Nếu bạn kiểm tra $ result3 trong mệnh đề if nó trả về true và mysql_affected_rows() trả về 0.
Điều này rất hữu ích .. Cảm ơn – hriziya
vì vậy, những gì nếu người dùng gửi lại dữ liệu đã giống với thông tin trong DB? Nếu bộ nhớ phục vụ sẽ trả về mysql_affected_rows() với một giá trị bằng 0 vì theo định nghĩa không có hàng nào được cập nhật trong tiến trình. Tuy nhiên, bản thân truy vấn đã thành công.
Cách giải quyết này sẽ được một trong hai giấy tờ chứng minh nội dung của bạn trước khi chèn hoặc sử dụng:
$result = mysql_query($q);
if(mysql_affected_rows() == 0)
$state = $result ? "Success" : "Fail";
Bằng cách này bạn có thể kiểm tra xem các hàng đã được cập nhật và nếu không bạn có thể kiểm tra xem đó là một sự cố hoặc chỉ cần lặp lại dữ liệu.
4 kết quả có thể xảy ra: sự cố, dữ liệu được cập nhật, lặp lại dữ liệu hoặc không tìm thấy khóa. Rất tiếc, việc kiểm tra lỗi sẽ không giúp bạn phân biệt giữa khóa không tìm thấy và lặp lại dữ liệu. –
Tôi khá muộn ở đây, nhưng bạn luôn có thể buộc không thành công khi thay đổi truy vấn của mình.
Đối với bảng 'foo' có cột 'ID' và 'value'. Biểu thức đối sánh: ID = 4
update foo
join (select ID as nearID,
ID = 4
as matched from foo order by matched desc limit 0, 1) as t on nearID = ID
set value='somedata2'
, ID = if(matched, nearID, 'nomatch')
Có thể dễ dàng thay đổi bảng để bao gồm dấu thời gian cập nhật hoặc số thứ tự thay thế. (vì những thay đổi này sẽ thay đổi theo từng lần cập nhật)
mysql_affected_rows ($ link) là chính xác nhưng bị khấu hao .. mysqli_affected_rows ($ link) nên được sử dụng ngay bây giờ.
Nếu sử dụng PDO, hàng bị ảnh hưởng có thể thu được bằng rowCount() chức năng như sau:
/* Delete all rows from the FRUIT table */
$del = $dbh->prepare('DELETE FROM fruit');
$del->execute();
/* Return number of rows that were deleted */
print("Return number of rows that were deleted:\n");
$count = $del->rowCount();
print("Deleted $count rows.\n");
Nếu bạn đang sử dụng tuyên bố chuẩn bị ..
//query
$stmt = $conn->prepare("UPDATE user SET name = 'Jack' WHERE id = ?");
//bind parameters
$stmt->bind_param("i", $id);
//execute
$stmt->execute();
//updated row count
echo $stmt->affected_rows;
echo " rows updated";
- 1. chọn các hàng bị ảnh hưởng bởi bản cập nhật
- 2. đếm số hàng bị ảnh hưởng trước khi cập nhật trong trình kích hoạt
- 3. PHP/mysql nhận được số hàng bị ảnh hưởng của câu lệnh UPDATE
- 4. PHP, MySQL - bạn có thể phân biệt giữa các hàng phù hợp và hàng bị ảnh hưởng không?
- 5. Nhận hàng bị ảnh hưởng trên ExecuteNonQuery
- 6. EF eqivalent cho các hàng bị ảnh hưởng của SqlCommand.ExecuteNonQuery
- 7. Cập nhật toàn bộ hàng trong MySQL
- 8. mySQL truy vấn UPDATE trả về "0 hàng bị ảnh hưởng"
- 9. Cách nhận số hàng bị ảnh hưởng trong sqlalchemy?
- 10. Trả về số hàng bị ảnh hưởng bởi câu lệnh SQL UPDATE trong Java
- 11. Kiểm tra số hàng bị ảnh hưởng trong CodeIgniter
- 12. Bắt số hàng bị ảnh hưởng bởi một UPDATE trong PostgreSQL
- 13. Công cụ dòng lệnh MySQL: Cách tìm ra số hàng bị ảnh hưởng bởi DELETE?
- 14. MySQL: trở về cập nhật hàng
- 15. Số hàng bị ảnh hưởng Zend DB (UPDATE)
- 16. Bắt hàng bị ảnh hưởng bởi tuyên bố UPDATE trong RAW plpgsql
- 17. PHP với MySQL bị chậm
- 18. Perl: Cập nhật nhiều hàng với một cuộc gọi MySQL
- 19. Tại sao có thêm "(1 hàng) bị ảnh hưởng"
- 20. Cập nhật MYSQL với jQuery/AJAX
- 21. Cập nhật MySQL với phụ chọn
- 22. mysql cập nhật với regexp
- 23. MySQL GIẢI THÍCH CẬP NHẬT
- 24. Oracle tương đương với bản cập nhật MySQL bỏ qua
- 25. Hàng PDOCount không trả lại số hàng bị ảnh hưởng chính xác
- 26. Cập nhật timestamp khi hàng được cập nhật trong PostgreSQL
- 27. Đang cập nhật với PHP
- 28. Bản sắc của hàng được chèn/cập nhật trong trình kích hoạt
- 29. cập nhật mysql với điều kiện nếu
- 30. MySql CẬP NHẬT với SUM trong cùng một bảng
Nhưng nó trả về 0 khi thành công và bạn đặt cùng một dữ liệu như đã có trong bảng. – madlopt