Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PDO gửi truy vấn thô tới MySQL trong khi Mysqli gửi truy vấn đã chuẩn bị sẵn, cả hai đều tạo ra cùng một kết quả

PDO của bạn được định cấu hình để mô phỏng các truy vấn đã chuẩn bị, trong khi mysqli đang sử dụng các truy vấn chuẩn bị thực sự.

Truy vấn đã chuẩn bị liên kết chuỗi ''1'' dưới dạng giá trị tham số nguyên. PHP cưỡng chế nó thành một số nguyên bằng cách sử dụng một cái gì đó như intval() . Bất kỳ chuỗi nào có ký tự đầu không phải là số đều được PHP hiểu là 0, vì vậy giá trị tham số được gửi sau chuẩn bị là giá trị 0.

Truy vấn chuẩn bị giả sử dụng nội suy chuỗi (thay vì ràng buộc) để thêm chuỗi ''1'' vào truy vấn SQL trước MySQL phân tích cú pháp nó. Nhưng kết quả là tương tự, vì SQL cũng xử lý một chuỗi có các ký tự đứng đầu không phải số trong ngữ cảnh số nguyên là giá trị 0.

Sự khác biệt duy nhất là những gì kết thúc trong nhật ký truy vấn chung khi tham số bị ràng buộc trước khi chuẩn bị so với sau khi chuẩn bị.

Bạn cũng có thể làm cho PDO sử dụng các truy vấn chuẩn bị thực sự, vì vậy nó sẽ hoạt động giống như mysqli trong trường hợp này:

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Tái bút:Điều này có thể chứng minh một lý do chính đáng tại sao thường bắt đầu các giá trị id bằng 1 thay vì 0.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao lại sử dụng các ràng buộc Khoá ngoại trong MySQL?

  2. Đếm bao nhiêu hàng được chèn từ truy vấn SQL cuối cùng

  3. Làm cách nào để đặt định dạng autoincrement thành 0001 trong MySQL?

  4. Không thể chọn MySQL từ Chọn nguồn dữ liệu trong Visual Studio 2013

  5. MySQL BLOB so với Tệp để lưu trữ hình ảnh PNG nhỏ?