Can Prepared Statements Handle Dynamic Table Names?
You attempted to execute a MySQL prepared statement with a placeholder ? in the table name. Unfortunately, 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中文网其他相关文章!