回答

收藏

处理PDO :: prepare()添加的报价

技术问答 技术问答 194 人阅读 | 0 人回复 | 2023-09-14

根据PHP文档,PDO :: prepare()在所有参数中都加上引号,这样您就不必担心这样做了:
5 W4 \5 Z. @! D+ R) m0 H6 V
4 R( V+ y$ j1 g+ e0 N) n“准备语句的参数不需要加引号;驱动程序会自动处理。如果应用程序专门使用准备语句,开发人员可以确保不会发生SQL注入(但是,如果查询的其他部分正在使用未转义的输入构建,仍然可以进行SQL注入)。”
# D2 J3 K8 h2 b: r% A' s# B/ o4 q
1 v; f) s+ P3 D/ t; G( K7 s
对我来说,这个问题是我构建查询和数据库结构的方式。通常,不需要对SQL语句的FROM部分进行参数设置,因为Table可能是由直接用户输入定义的。但是,在某些地方使用我的代码是这样,因此我对参数化版本感到更自在。
4 K7 ], h2 y: I8 I; d4 @SELECT * FROM ? WHERE ?=?
! r! ]4 |3 F" m而不是SELECT * FROM tablename WHERE?=?+ ~$ v3 }3 j! r: O( `3 v# p: n3 ^
所以我的问题是,是否可以防止我的PDO对象在FROM参数周围添加引号,以使我不会在脸上抛出SQL错误?还是我必须以其他方式执行此操作。' s4 z5 H8 H8 j/ l/ P4 g" q  M- v
               
6 L! T+ A- {' l+ L解决方案:+ [( t9 A% [. k% m( X
                # X- J& z- \# h' d
. ?3 \4 A4 m' l( B/ O

! Q) @# |' t/ ]                准备好的语句中的占位符仅用于值。插入动态表名称的唯一方法是自己完成" E( D$ Z$ Q2 O' q+ ]% S
"SELECT FROM `".$table."` WHERE `".$column."` = ?"
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则