您可以使用PDO将占位符放在查询的选定部分吗?

时间:2011-11-28 19:18:46

标签: php mysql pdo

我计划使用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';

感谢。

1 个答案:

答案 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';" ... );