我在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
。
答案 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)
}
祝你好运