PHP 内爆数组生成 mysql IN 条件

标签 php mysql zend-framework zend-db

我有一个类似下面的函数:

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/

相关文章:

php - 的PHP,MySQL的错误 undefined index

php - 如何在 application.ini 中设置数据库时区

php - 如何在 Zend Framework 中使用 Join

php - HHVM 上的 PHP 请求参数

php - 按数据库中的评级排序 - 将此 SQL 放在哪里? (PHP/MySQL)

php - "isset"函数的使用

java - 通过时间戳创建,让数据库管理它更好,还是让应用程序管理更好?

mysql - WITH ROLLUP 结合多个 GROUP BY 条件

php - MySQL从php中的查询结果进行查询

php - 如何使用 Zend Framework 2 在模型中设置 2 个表名