Khi execute()
trả về true nó có nghĩa là câu lệnh "thành công", nhưng nó không có nghĩa là nó đã thay đổi bất cứ điều gì. Nó chỉ có nghĩa là không có lỗi.
-
Nó có thể đã khớp với không hàng vì các điều kiện trong mệnh đề WHERE. Đó vẫn được coi là một "thành công." Bạn có thể thử một
SELECT
với cùng một mệnh đề WHERE và tìm nạp kết quả để xác nhận rằng nó khớp với các hàng. -
Nó có thể đã khớp với một hoặc nhiều hàng, nhưng các giá trị bạn đang đặt đã là giá trị trên các hàng đó. Bạn có thể gọi
$sth->rowCount()
sau khi bạn thực thi, để tìm hiểu số hàng mà CẬP NHẬT bị ảnh hưởng (con số này có thể ít hơn số hàng mà nó phù hợp). -
Nếu bạn có nhiều hơn một bản sao của bảng này, bạn nên kiểm tra kỹ xem thay đổi đã được thực hiện trong cơ sở dữ liệu bạn đang đọc chưa. Điều đó xảy ra với tôi đôi khi - tôi quên thay đổi tệp cấu hình ứng dụng và tôi không nhận ra rằng mình đang cập nhật cơ sở dữ liệu sai.
Đây hóa ra là vấn đề - một biến thể ở điểm thứ ba:
- Nếu bạn làm việc trên nhiều máy chủ, hãy kiểm tra kỹ xem bạn có đang kiểm tra các thay đổi trên đúng máy chủ mysql không.