2011-09-09 20 views
29

Làm cách nào để biết khi nào một CẬP NHẬT MySQL đã thành công so với dữ liệu cập nhật thực sự?Làm cách nào để biết khi nào một CẬP NHẬT MySQL đã thành công so với dữ liệu cập nhật thực sự?

Ví dụ:

TABLE 
id city_name 
1  Union 
2  Marthasville 

Nếu tôi chạy như sau:

$data = array('city_name', 'Marthasville'); 

//update record 2 from Marthasville to the same thing, Marthasville. 
$this->db->where('id', 2); 
$this->db->update('table', $data); 

if($this->db->affected_rows() > 0) 
{ 
    //I need it to return TRUE when the MySQL was successful even if nothing was actually updated. 
    return TRUE; 
}else{ 
    return FALSE; 
} 

này sẽ trở lại TRUE mỗi khi câu lệnh UPDATE là thành công, nhưng FALSE khi không có hàng đã thực sự được cập nhật.

Tôi cần nó để trả về TRUE mỗi khi câu lệnh UPDATE được thực hiện thành công ngay cả khi nó không thực sự thay đổi bất kỳ bản ghi nào.

Trả lời

38

Có một cái nhìn tại mysql_affected_rows()

Nó sẽ cho bạn biết nếu bất cứ điều gì đã thực sự được cập nhật như trái ngược với không có gì đã được cập nhật thành công dẫn đến sự trở lại của sự thật.

php.net nói:

mysql_affected_rows()

Trả về số hàng bị ảnh hưởng đến sự thành công, và -1 nếu truy vấn cuối cùng thất bại.

Bạn có thể sử dụng sau đây để đạt được kết quả mong muốn của bạn:

if($this->db->affected_rows() >= 0){ } 
+0

tôi chỉ cập nhật câu hỏi của tôi một lần nữa để rõ ràng hơn nêu vấn đề tôi đang gặp khó với việc sử dụng mysql_affected_rows(). Ước gì tôi sẽ không đăng câu hỏi của tôi sớm như vậy: S – zechdc

+1

Tôi tin rằng câu trả lời của JLeafgle vẫn đúng. mysql_affected_rows sẽ trả về -1 nếu truy vấn cuối cùng thất bại, nếu không sẽ trả về> = 0. Giả sử đó là những gì bạn đang làm sau đó, sau đó chỉ cần thay đổi câu lệnh if của bạn thành ... "if ($ this-> db-> affected_rows()> = 0) " –

+0

Bạn đúng @Jon Stirling. Tôi đã cập nhật câu trả lời của Jleagle để phản ánh đề xuất của bạn, tuy nhiên tôi không thể phê duyệt bản chỉnh sửa để nếu người khác có thể, điều đó sẽ tuyệt vời. Cảm ơn! – zechdc

10

Sau đó, bạn sẽ sử dụng mysql_query: Báo cáo

SQL, INSERT, UPDATE, DELETE, DROP, vv, mysql_query() trả về TRUE khi thành công hoặc FALSE do lỗi.

đơn giản như thế này:

$result = $this->db->update('table', $data); 

if($result) 
{ 
    //without error even no row updated 
} else { 

} 
+0

Cảm ơn câu trả lời. Mã của bạn sẽ làm việc cho tình hình của tôi, tuy nhiên, câu trả lời của Jleagle hoạt động tốt hơn một chút trong mã của tôi. – zechdc

+0

Điều này cũng áp dụng cho đối tượng PDO trong các phiên bản sau của PHP? –

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