Zend Framework查询不起作用?

时间:2013-04-25 10:28:43

标签: zend-framework

我在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

2 个答案:

答案 0 :(得分:0)

基于评论中的讨论,认为它只是在浏览器中显示SQL查询,而不显示字符串的“第1部分”位,因为浏览器将解释<和{{1} }字符作为HTML标记并隐藏其内容。您用于查询本身的代码看起来很好,所以只需使用:

>

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

答案 1 :(得分:0)

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

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

默认情况下,您将$field$value设置为null,因此对!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)
}

祝你好运