是否可以按sql语句的部分顺序绑定Param。例如,以下可能吗?
select whatever from table where age > :age order by :user_specified_order_by_field_name_here
如果没有,建议如何确保user_specified_order_by_field_name_here
不包含SQL注入代码?
否,PDO不支持将动态表或列名作为准备值。插入到查询中的任何列名都不会被转义,这将导致SQL注入漏洞。
PDO::Quote()也没有帮助——它只能转义字符串,但在mySQL中,列名不是字符串。
防止出现问题的唯一100%安全的方法是将user_specified_order_by_field_name_here
与表中的有效列列表进行比较。您甚至可以使用数字(在内部解析为列名)来添加额外的模糊层。