使用in_array()清理SQL和PHP中的查询

时间:2015-10-21 11:21:40

标签: php mysql pdo sql-injection

使用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));

有更安全/更快捷的方法吗?

1 个答案:

答案 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;

function benchmarks