处理PDO :: prepare()添加的引号

ham*_*mal 8 php mysql sql pdo

根据PHP文档PDO :: prepare()为所有参数添加引号,这样您就不必担心这样做了:

"不需要引用预处理语句的参数;驱动程序会自动处理此问题.如果应用程序专门使用预准备语句,开发人员可以确保不会发生SQL注入(但是,如果查询的其他部分正在进行用非转义输入构建,SQL注入仍然可行.)"

这对我来说的问题是我构建查询和数据库结构的方式.通常,SQL语句的FROM部分不需要参数化,因为表可能由直接用户输入定义.但是我的代码就是某些地方的情况,因此我对参数化版本感觉更舒服.

SELECT * FROM ? WHERE ?=?
Run Code Online (Sandbox Code Playgroud)

而不是SELECT*FROM tablename WHERE?=?

所以我的问题是,是否有可能阻止我的PDO对象在FROM参数周围添加引号,以便我不会在我脸上抛出SQL错误?或者我必须以不同的方式做到这一点.

Kin*_*nch 6

准备好的语句中的占位符仅用于值。插入动态表名的唯一方法是自己做

"SELECT FROM `".$table."` WHERE `".$column."` = ?"
Run Code Online (Sandbox Code Playgroud)

  • 当然,如果变量内容来自受污染的源,那么仅仅用反引号包装值是不安全的。 (3认同)