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

Tôi có thể tham số hóa tên bảng trong một câu lệnh đã soạn sẵn không?

Câu trả lời ngắn gọn cho câu hỏi của bạn là "không".

Theo nghĩa chặt chẽ nhất, ở cấp cơ sở dữ liệu, các câu lệnh được chuẩn bị sẵn chỉ cho phép các tham số được ràng buộc đối với các bit "giá trị" của câu lệnh SQL.

Một cách nghĩ về điều này là "những thứ có thể được thay thế khi thực thi câu lệnh trong thời gian chạy mà không làm thay đổi ý nghĩa của nó". (Các) tên bảng không phải là một trong những giá trị thời gian chạy đó, vì nó xác định tính hợp lệ của chính câu lệnh SQL (tức là tên cột nào là hợp lệ) và việc thay đổi nó tại thời điểm thực thi sẽ có khả năng thay đổi liệu câu lệnh SQL có hợp lệ hay không.

Ở cấp độ cao hơn một chút, ngay cả trong các giao diện cơ sở dữ liệu mô phỏng thay thế tham số câu lệnh đã chuẩn bị thay vì thực sự gửi các câu lệnh đã chuẩn bị đến cơ sở dữ liệu, chẳng hạn như PDO, có thể cho phép bạn sử dụng trình giữ chỗ ở bất cứ đâu (vì trình giữ chỗ được thay thế trước khi được gửi đến cơ sở dữ liệu trong các hệ thống đó), giá trị của trình giữ chỗ bảng sẽ là một chuỗi và được bao gồm như vậy trong SQL được gửi đến cơ sở dữ liệu, vì vậy SELECT * FROM ? với mytable vì tham số thực sự sẽ kết thúc việc gửi SELECT * FROM 'mytable' vào cơ sở dữ liệu, đó là SQL không hợp lệ.

Đặt cược tốt nhất của bạn là tiếp tục với

SELECT * FROM {$mytable}

nhưng bạn hoàn toàn nên có một danh sách trắng các bảng mà bạn kiểm tra trước nếu $mytable đến từ đầu vào của người dùng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bạn có được phép sử dụng số làm tên bảng trong MySQL không?

  2. Đá quý mysql2 được biên dịch cho thư viện máy khách mysql sai

  3. Tìm kiếm MySQL trong danh sách dấu phẩy

  4. Sử dụng tệp .php để tạo kết xuất MySQL

  5. Đặt lại mật khẩu gốc của MySQL