2011-11-28 52 views
1

我打算使用PDO的prepare()和​​機制來防止SQL注入攻擊。您可以使用PDO在查詢的選定部分中添加佔位符嗎?

通常,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';

感謝。

+2

我想你是問,因爲你嘗試,並得到一個錯誤信息。你也應該提及這一點。 –

回答

0

沒有。 PDO無法清理列名或表名。

如果你真的使用動態表名,最安全的方式來處理它們是不檢查它們是否確實存在於表中,並以正常的方式將它們插入到查詢中。

僞代碼:

$fieldname = make_sure_this_field_really_exists($_GET["fieldname"]);  
$PDO->prepare("select name, age, `$fieldname` from members where age > ? and gender = 'f';" ...); 
相關問題