我计划使用PDO的prepare()
和execute()
机制来防止SQL注入攻击。
通常,SQL中的占位符位于条件部分中。
例如
select name, age from members where age > ? and gender = 'f';
但是,是否可以将占位符放在选择部分中?
select name, age, ? from members where age > ? and gender = 'f';
我知道我不能把列名放在那里,但我可以把常量吗?像
select name, age, 'foo' from members where age > ? and gender ='f';
感谢。
答案 0 :(得分:0)
不。 PDO无法清理列名或表名。
如果您确实 使用动态表名,那么最安全的处理方法就是不检查它们是否实际存在于表中,并以正常方式将它们插入到查询中。
的伪代码:
$fieldname = make_sure_this_field_really_exists($_GET["fieldname"]);
$PDO->prepare("select name, age, `$fieldname` from members where age > ? and gender = 'f';" ... );