php - 表名作为变量

标签 php mysql sql pdo prepared-statement

我一直在 PDO 中使用准备好的语句,我发现表名无法绑定(bind)。虽然我可以使用类似 $sql = "select * from $table_name where some = :something"

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

最佳答案

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

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

如果表名来自mysql的information_schema,那么就是这样,您可以使用它而无需任何进一步的检查,因为它是一个有效的表名。只需在名称周围加上反引号即可。

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

关于php - 表名作为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43625304/

相关文章:

php - 处理MySQL查询结果时如何限制PHP内存使用?

mysql - 用两个数据(外键)填充数据库字段

java - ODBC 驱动程序管理器 'invalid string or buffer length' 错误

mysql - 安装 Xampp 和 MySql 有什么区别?

php - TCPDF:图像无法在 PDF 中正确显示

PHP 使用 Outlook 发送邮件

mysql - 挣扎于 SQL 查询

mysql - 简化子查询mysql以获取关系表中的所有列

sql - Oracle中如何使用substr?

php - CKEditor 未与 Sonata Formatter(Sonata Admin Bundle)一起显示