1

Zend select 中的“SELECT”语句有问题。

public function listAnswers($sort_field = 'answer_id', $field = null, $value = null, $strict_filter = false, $client_id = null) {
    //here is $value
    // $value  = "abcd : <?\\?>"; 
    $value = $this->getDefaultAdapter()->quote("%".$value."%");

    if( !empty($field) && !empty($value) && $strict_filter == false){
            $select = $this->select()->where(" client_id != -99 ")->where($field . " like $value ")->order($sort_field);
    }
}

错误来了,我打印的查询是

    SELECT `answer`.* FROM `answer` WHERE ( client_id != -99 ) AND (client_id = '1') AND (answer_text LIKE '%abcd : <?\\\\?>%' ) ORDER BY `add_date` DESC

记录不来就酌情$value了。

4

2 回答 2

0

使用 select() 时通常不需要引用值,select() 通常会默认提供引号。使用 select() 时,最好使用占位符而不是串联,因为串联可能并不总是有效。

$select->order()需要一个字符串来指定查询('answer_id ASC'),除非您总是想要默认值。

您默认设置$fieldand $valueto null,因此测试 for!empty()确实没有语义意义。

不要忘记您必须实际获取结果并将其返回。

//assuming a dbTable model where $this->select() is valid.
public function listAnswers($sort_field = 'answer_id', $field = null, $value = null, $strict_filter = false, $client_id = null) {
    //here is $value
    // $value  = "abcd : <?\\?>"; 
    //unless your values are really strange select() will provide the quotes
    //$value = $this->getDefaultAdapter()->quote("%".$value."%");
    //it may help to initialize select() before the loop
    $select = $this->select();
    if( !is_null($field) && !is_null($value) && $strict_filter == false){
        $select->where(" client_id != -99 ")
            //use placeholders when using the select()
            ->where("$field like ?" $value)
            //specify order by with a string ie: answer_id ASC
            ->order($sort_field . 'ASC');
    }
    //return the result
    return $this->fetchAll($select)
}

祝你好运

于 2013-04-26T10:07:35.637 回答
0

根据评论中的讨论,认为它只是在浏览器中显示 SQL 查询,没有显示字符串的“第 1 部分”位,因为浏览器会将<>字符解释为 HTML 标记并隐藏它们的内容。您用于查询本身的代码看起来不错,所以只需使用:

echo htmlspecialchars($select);exit;

用于调试以验证是否正在运行正确的查询。

于 2013-04-25T11:30:27.030 回答