Php 表名作为变量

Php 表名作为变量,php,mysql,sql,pdo,prepared-statement,Php,Mysql,Sql,Pdo,Prepared Statement,我一直在PDO中使用prepared语句,我发现表名不能绑定。虽然我可以使用类似于$sql=“select*from$table\u name where something=:something” 如果$table_name变量是通过运行查询并从数据库获取值的方法在内部分配的,那么此方法安全吗?或者使用变量表名是一种不好的做法?如果是基于意见的,我想知道您的意见。在某些情况下,您必须使用动态表名,因此这是一种可以接受的做法。就我个人而言,我会仔细检查这个要求是否必须,如果不是,则在查询中硬编码

我一直在PDO中使用prepared语句,我发现表名不能绑定。虽然我可以使用类似于
$sql=“select*from$table\u name where something=:something”


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

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

如果表名来自用户输入,那么我将使用白名单作为安全措施:从mysql的information_模式中获取表名列表,并将其与应用程序代码中的输入进行比较,以避免任何aql注入

如果表名来自mysql的信息\u模式,那么就可以使用它,无需进一步检查,因为它是一个有效的表名。只需在名字周围打勾

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