表名称为变量

时间:2017-04-26 04:50:21

标签: php mysql sql pdo prepared-statement

我一直在使用PDO准备好的语句,我发现表名不能绑定。虽然我可以使用像$sql = "select * from $table_name where something = :something"

这样的东西

如果$ table_name变量是由方法在内部通过运行查询并从数据库中获取值来分配的,那么此方法是否安全?或者使用变量表名是不好的做法?如果是基于意见的,我想知道你的意见。

1 个答案:

答案 0 :(得分:0)

在某些情况下,您必须使用动态表名称,因此这是一种可接受的做法。就个人而言,我会仔细检查这个要求是否必须,如果没有,那么在查询中对表名进行硬编码。

如果表名来自用户输入,那么我将使用白名单作为安全措施:从mysql的information_schema获取表名列表,并将它们与应用程序代码中的输入进行比较< / strong>避免任何aql注入。

如果表名来自mysql的 information_schema ,那么就可以使用它,而无需进一步检查,因为它是一个有效的表名。只需在名称旁边加上反复使用。

如果表名来自应用程序创建的表,那么我将再次通过information_schema检索表列表,并检查它是否存在于应用程序代码中。这可确保表名有效。