2011-07-17 41 views
5

Khi thực hiện một câu lệnh SQL, chẳng hạn như INSERT INTO table ... ON DUPLICATE CẬP NHẬT KEY ... Tôi dựa vào mysql_affected_rows() để xác định xem một chèn hoặc cập nhật được thực hiện. làm địa điểm mysql trên http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html, nó khẳng định:mysql_affected_rows() trả về -1

Đối INSERT ... Về báo cáo UPDATE KEY trùng lặp, các giá trị hàng bị ảnh hưởng là 1 nếu hàng được chèn vào như một hàng mới và 2 nếu một hàng hiện có đã cập nhật.

Tất cả đang làm việc Ok cho đến khi chúng tôi nâng cấp lên MySQL 5.1.16, khi nhiều truy vấn bây giờ đã có mysql_affected_rows() trở TRỪ MỘT (-1)

Các giải pháp đề nghị trên trang web MySQL trên http://dev.mysql.com/doc/refman/5.1/en/mysql-store-result.html là để gọi hàm mysql_store_result() sau mỗi lần thực hiện hàm mysql_query() trên một truy vấn chọn.

Tuy nhiên, PHP dường như không có chức năng được xác định.

Làm cách nào để mysql_affected_rows() hoạt động đúng cách bằng PHP và MySQL 5.1.16?

+0

Bạn đang sử dụng câu lệnh đã chuẩn bị chưa? Nhân tiện, PHP có hàm store_result - http://php.net/manual/en/mysqli.store-result.php, nhưng store_result được gọi sau khi SELECT, không phải sau INSERT. * -1 cho biết truy vấn trả lại lỗi hoặc điều đó, đối với truy vấn SELECT, mysql_affected_rows() được gọi trước khi gọi mysql_store_result() * –

+0

Tôi cũng có vấn đề này ... –

Trả lời

2

mysql_affected_rows trả về -1 nếu truy vấn cuối cùng không thành công. Tôi sẽ kiểm tra các truy vấn của bạn và/hoặc kết nối cơ sở dữ liệu. Xem this link.

4

Nói chung, nếu mysql_affected_rows() trả về -1, thì điều đó có nghĩa là truy vấn không thành công (xem manual page để biết thêm thông tin). Bạn có thể kiểm tra xem lỗi là gì bằng cách gọi mysql_error(), nhưng bạn nên chọn lỗi đã có khi bạn gọi mysql_query() trước khi bạn đến điểm tìm ra số hàng bị ảnh hưởng.

Vì bạn đang hỏi về store_result chức năng, hãy để tôi cũng trả lời một phần của câu hỏi của bạn:

mô-đun MySQL PHP có thể không có một chức năng store_result, nhưng MySQLi mô-đun mới hơn không. Xem http://php.net/manual/en/mysqli.store-result.php

Thường được khuyên nên chuyển từ sử dụng các hàm mysql_xxx thành các hàm mysqli_xxx tương đương, vì vậy đây sẽ là cơ hội hoàn hảo để bạn làm như vậy.

Bạn không cần nâng cấp phiên bản PHP của mình vì điều này, vì mô-đun MySQLi đã được giới thiệu với PHP 5.0. Tuy nhiên tôi sẽ đề nghị xem xét một nâng cấp dù sao - nếu bạn đang sử dụng PHP 5.1, bạn đang sử dụng một phiên bản đã được hỗ trợ trong hơn năm năm rồi.

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