Search code examples
phpmysqlzend-frameworkzend-db

Where clause with Zend_Db not working as expected


I am getting an error:
Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%'Chinese'%) ORDER BYtext_idDESC LIMIT 10' at line 2

caused by this line of code

 $select = $this->_db->select('')
            ->from(array('t'=>'as_text'))
           ->where('`s`.`name` LIKE %?%',$search) //this is causing error
            ->limit((int)$limit)
            ->order('text_id DESC')
            ->join(array('s'=>'as_source'),'t.source_id = s.source_id',array('s.name as source'));

My target is this sql:

SELECT `t` . * , `s`.`name` AS `source`
FROM `as_text` AS `t`
INNER JOIN `as_source` AS `s` ON t.source_id = s.source_id
WHERE `s`.`name` LIKE '%Chinese%'
ORDER BY `text_id` DESC
LIMIT 10 

i think it's the ->where bit, because when I remove it i get 10 rows.


Solution

  • Edit: This works for me:

            ->from(array('t'=>'as_text')) 
           ->where("s.name LIKE ?",'%'.$search.'%') //this is causing error 
            ->limit((int)$limit) 
            ->order('text_id DESC') 
            ->join(array('s'=>'as_source'),
            't.source_id = s.source_id',
            array('s.name as source'));
    

    Let me know if that works.