我可能弄错了,但我不相信你可以在PDO中提供字段作为参数.
为什么不将它指定为函数的参数?与用户提供的数据不同,字段是有限的,定义良好且不经常更改.如在
selectquery('name',$value);
并有你的查询
$field = "name";
$value = "joe";
function selectquery($field, $value)
{
global $dbcon;
$select=$dbcon->prepare("SELECT * FROM tester1 WHERE $field = :value");
if($select->execute(array(':value' => $value)));
//etcetera
由于您自己为函数调用提供字段名称,因此除非您担心自己会使用SQL注入攻击自己,否则这是安全的.
如果由于某些奇怪的原因,该字段的名称来自用户输入,您可以创建一个允许字段数组.这样,您就可以安全地进行注射,因为这些值只能来自您的数组.我不知道为什么字段名称来自用户输入,因此不受信任,除非您正在制作API?另外,可能有更好的方法来实现目标.
无论如何,这将是一个潜在的解决方案,使用白名单表名:
$field = "name";
$value = "joe";
$allowed_fields=array('name','other_name','sandwich');
function selectquery($field_name, $value)
{
global $dbcon,$allowed_fields;
if(!in_array($field_name,$allowed_fields)){ return false; }
else{ $field=$field_name; }
$select=$dbcon->prepare("SELECT * FROM tester1 WHERE $field = :value");
if($select->execute(array(':value' => $value)));
//etcetera