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

Thoát tên cột trong câu lệnh PDO

Cách chuẩn ANSI để thực hiện một số nhận dạng được phân tách là:

SELECT "field1" ...

và nếu có "trong tên, hãy nhân đôi nó:

SELECT "some""thing" ...

Thật không may, điều này không hoạt động trong MySQL với cài đặt mặc định, bởi vì MySQL thích nghĩ rằng dấu ngoặc kép là một sự thay thế cho dấu ngoặc kép đơn cho các ký tự chuỗi. Trong trường hợp này, bạn phải sử dụng dấu gạch chéo ngược (như được phác thảo bởi Björn) và thoát dấu gạch chéo ngược.

Để thoát dấu gạch chéo ngược một cách chính xác, bạn sẽ cần mysql_real_escape_string, vì nó phụ thuộc vào bộ ký tự. Nhưng vấn đề là tranh luận, bởi vì cả mysql_real_escape_string và addlash đều không thoát khỏi ký tự backquote . Nếu bạn có thể chắc chắn rằng sẽ không bao giờ có các ký tự không phải ASCII trong tên cột, bạn có thể loại bỏ chỉ bằng cách thoát dấu gạch chéo ngược thủ công các ký tự `và \.

Dù bằng cách nào, điều này không tương thích với các cơ sở dữ liệu khác. Bạn có thể yêu cầu MySQL cho phép cú pháp ANSI bằng cách đặt tùy chọn cấu hình ANSI_QUOTES. Tương tự, theo mặc định, SQL Server cũng bị mắc kẹt trong dấu ngoặc kép; nó sử dụng một cú pháp khác, cụ thể là dấu ngoặc vuông. Một lần nữa, bạn có thể định cấu hình nó để hỗ trợ cú pháp ANSI với tùy chọn 'quote_identifier'.

Tóm tắt:nếu bạn chỉ cần khả năng tương thích với MySQL:

một. sử dụng dấu ngoặc kép và không cho phép dấu ngoặc kép, dấu gạch chéo ngược và ký tự nul trong tên vì việc thoát chúng là không đáng tin cậy

Nếu bạn cần khả năng tương thích chéo DBMS, hãy:

b. sử dụng dấu ngoặc kép và yêu cầu người dùng MySQL / SQL-Server thay đổi cấu hình thích hợp. Không cho phép các ký tự dấu ngoặc kép trong tên (vì Oracle không thể xử lý chúng ngay cả khi đã thoát). Hoặc,

c. có cài đặt cho MySQL so với SQL Server so với những người khác và tạo ra cú pháp dấu ngoặc kép, dấu ngoặc vuông hoặc dấu ngoặc kép tùy thuộc vào điều đó. Không cho phép cả dấu ngoặc kép và dấu gạch chéo ngược / backquote / nul.

Đây là thứ mà bạn hy vọng lớp truy cập dữ liệu sẽ có một chức năng, nhưng PDO thì không.

Tóm tắt tóm tắt:tên cột tùy ý là một vấn đề, tốt nhất nên tránh nếu bạn có thể giúp nó.

Tóm tắt tóm tắt của tóm tắt:gnnnnnnnnnnnh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt Máy chủ Web trong Windows XP với Apache2, PHP5 và MySQL4 - Phần 1

  2. Cách chạy tập lệnh PHP vào thời gian đã lên lịch

  3. Sử dụng truy vấn một hàng với MySQL và PHP

  4. C # với tham số INSERT của MySQL

  5. Làm thế nào để duy trì ràng buộc khóa ngoại trên các cơ sở dữ liệu khác nhau?