0

我想知道在这种情况下如何使用 ZEND 正确编写 mySQL 语句:

SELECT * FROM `users` WHERE role_id = 2 AND status = 2 AND bddate BETWEEN '1988-05-07' AND '1991-01-01' ORDER BY lastname DESC

我会有 if 语句,例如。如果在过滤器用户中选择了 role_id,我会将其包含在 WHERE 等中,其余部分相同。

到目前为止,我有 1 个 WHERE 条件,并且我已经这样做了(现在我需要更复杂的条件):

    $select = $this->select()
            ->setIntegrityCheck(false)
            ->from(array('u'=>'users'))
            ->join(array('r'=>'user_roles'), 'u.role_id = r.role_id', array('role'=>'title'));          
    if(count($filters) > 0) {
        foreach($filters as $field => $filter) {
            $select->where($field . ' = ?', $filter);
        }
    }

    if(null != $sortField) {

        $select->order($sortField);

    }
4

1 回答 1

3

好的,所以你遇到了 BETWEEN 的问题。有两种可能的解决方案:

a) 你使用两个 where 子句来分割 BETWEEN,所以你得到

$select = $this->select()
//... other conditions
    ->where('bddate >= ?', '1988-05-07')
    ->where('bddate <= ?', '1991-01-01');

或者

b)

$select = $this->select()
//... other conditions
    ->where ('bddate BETWEEN '1988-05-07' AND '1991-01-01');

我会推荐选项 a),因为它正确地转义了您的值。

于 2013-01-16T10:22:25.330 回答