PHP Implode,但包装报价中的每个元素

假设我有一个数组:

$elements = array('foo', 'bar', 'tar', 'dar'); 

然后我想build立一个DELETE IN SQL查询:

  $SQL = "DELETE FROM elements WHERE id IN ('" . implode(',', $elements) . "')"; 

问题是元素数组中的ids没有单独引用。 IE的查询看起来像:

  $SQL = "DELETE FROM elements WHERE id IN ('foo,bar,tar,dar'); 

什么是最好的,最elegants方法来解决这个问题?

添加引号到implode调用:(我假设你的意思是内implode

 $SQL = 'DELETE FROM elements WHERE id IN ("' . implode('", "', $elements) . '")'; 

这产生:

 DELETE FROM elements WHERE id IN ("foo", "bar", "tar", "dar") 

防止SQL注入的最好方法是确保元素正确地转义。

做一个简单的事情应该可行(但我没有testing过)是使用array_maparray_walk ,并转义每个参数,如下所示:

 $elements = array(); $elements = array_map( 'mysql_real_escape_string', $elements);