使用MySQL和PHP,典型的(PDO)查询如下所示:
ValueRangeFactory
这对SQL注入是安全的,因为属性值与查询分开处理。
但是,如果我想使用相同的代码编写可能检索不同字段或不同分组的查询,则不能单独使用prepare / execute方法,因为您不能将PDO参数用于字段(see here )。
您可以简单地使用in_array()来检查字段名称,如下所示:
// prepare the query
$q = $DB->prepare("SELECT * FROM table_name WHERE property = :value");
// run the query
$q->execute(array(':value'=>$value));
有更安全/更快捷的方法吗?
答案 0 :(得分:2)
似乎已经非常快速和安全。也许在查询中的字段名称周围添加反引号。
为了加快速度,您可以使用一个关联数组,只检查索引是否存在,而不是搜索数组的内容。
$fields = array('field1' => null, 'field2' => null, 'field3' => null);
if (!array_key_exists($field_name, $fields)) return false;
此外,isset比array_key_exists
更快if (!isset($fields[$field_name])) return false;