【问题标题】:Table name as parameter using PDO/MySQL prepared statement [duplicate]使用 PDO/MySQL 准备语句作为参数的表名 [重复]
【发布时间】:2011-11-24 09:36:29
【问题描述】:

这可能吗?例如

SELECT * FROM :database WHERE id = :id

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

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

或者我还需要学习其他技巧吗?

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

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

    【讨论】:

    • 哦,我没看到那个帖子。谢谢!
    【解决方案2】:

    在查询中传递动态构建的表名是非常危险的。但是,如果您的应用程序非常需要它,您就必须清理数据。由于 PDO 对此无能为力,因此您必须自己在表名上调用 mysql_real_escape_string。此外,您还必须将表名用反引号括起来作为“table_name”。因此,将查询准备为:

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

    注意:mysql_real_escape_string 需要已经建立到数据库的连接。

    编辑:但是当我想到它时,最好将$database 变量与您现有的表相匹配。

    【讨论】:

    • 是的,我是从固定列表中挑选它们,但这是一个好点。
    猜你喜欢
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多