我有一个类似下面的函数:
public function foo ($cities = array('anaheim', 'baker', 'colfax') )
{
$db = global instance of Zend_Db_Adapter_Pdo_Mysql...
$query = 'SELECT name FROM user WHERE city IN ('.implode(',',$cities).')';
$result = $db->fetchAll( $query );
}
在有人将 $cities 作为空数组传递之前,一切正常。
为了防止这个错误,我一直在像这样打破查询的逻辑:
$query = 'SELECT name FROM user';
if (!empty($cities))
{
$query .= ' WHERE city IN ('.implode(',',$cities).')';
}
但这不是很优雅。我觉得应该有更好的方法来按列表过滤,但我不确定如何。有什么建议吗?
最佳答案
如果您最终使用了选择对象,->where()
方法实际上会为您处理数组。仍然需要检查数组中是否有项目,但这使它成为一种更简洁的方法...
$select = $db->select()->from('user', 'name');
if ($cities) {
$select->where('city IN (?)', $cities);
}
关于PHP 内爆数组生成 mysql IN 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3867840/