Can Prepared Statements Handle Dynamic Table Names?
You attempted to execute a MySQLced statement with a placeholder in the , this is not a supported feature. Prepared statements are designed to bind parameters to "value" sections of an SQL statement,而不是表名等結構元素。
在資料庫層面,修改表名可能會改變語句的有效性,而這超出了預先編譯的範圍。即使在允許在任何位置使用佔位符的資料庫介面中,佔位符的值仍會轉換為字串,因此SELECT * FROM ? 實際上會發送無效的SQL (即`SELECT * FROM 'mytable' ' )。
避免這種注入的最佳做法是使用白名單檢查。在建置查詢之前,驗證輸入的表名是否在預先核准的清單中。這將確保只使用安全的表名,從而減輕 SQL 注入的風險。
以上是準備好的語句可以在 SQL 中使用動態表名稱嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!