使用PDO / MySQL预处理语句将表名作为参数

时间:2011-09-24 20:35:22

标签: php mysql pdo

这可能吗? e.g。

SELECT * FROM :database WHERE id = :id

如果没有,我应该这样做:

SELECT * FROM ' . $database . ' WHERE id = :id

或者还有其他一些我需要学习的技巧吗?

2 个答案:

答案 0 :(得分:3)

表和列名称不能由PDO中的参数替换。 见Can PHP PDO Statements accept the table or column name as parameter?

答案 1 :(得分:3)

在查询中传递动态构建的表名是非常危险的。但是,如果您的应用程序非常需要它,那么您必须清理数据。由于PDO无法解决此问题,因此您必须自己在表名上调用mysql_real_escape_string。此外,您还必须将带有反引号的表名括起来作为`table_name`。因此,请将查询准备为:

'SELECT * FROM `' . mysql_real_escape_string($database) . '` WHERE id = :id

注意:mysql_real_escape_string需要已建立的与DB的连接。

编辑:但是当我考虑它时,最好将$database变量与现有表格相匹配。