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.