Soaress 0 Denunciar post Postado Julho 1, 2011 Alguem poderia nos ajudar em um select para busca um nome ou parte do nome? por meio de um LINK $select = $sql->select() ->from(array('p'=>'cliente')) ->from(array('LIKE'=>'LIKE')) ->where(array($coluna=>$option,)) ->order("idCliente"); $dados = $sql->fetchAll(PDO::FETCH_OBJ)->toArray(); Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 1, 2011 Poste a query como você quer que fique (seja enviada para o banco), porque não consegui entender. O LIKE que eu conheço é no where, não no FROM. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Soaress 0 Denunciar post Postado Julho 2, 2011 Descupa erro na digitação. Quero fazer uma busca e mostrar o resultado. Quero que mostre os dados daquela palavra que eu mandar via post. $coluna = coluna da tabela $option = nome ou palavra buscado Estou usando o Zend_Db_Table_Abstract $form = new Application_Form_Busca(); if($this->_request->isPost()) { $option = $this->_request->getPost('option'); $coluna = $this->_request->getPost('coluna'); if ($coluna) { $sql = new Application_Model_Cliente(); $select = $sql->select() ->from(array('p'=>'cliente')) ->where(array('LIKE'=>'LIKE')) ->where(array($coluna=>$option,)) ->order("idCliente"); $dados=$sql->fetchAll(PDO::FETCH_OBJ)->toArray(); $this->view->form = $form; if ($dados > 0) { $this->view->rows = $dados; } } }else { $this->view->form = $form; //$this->_redirect('/cliente/busca'); } } Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 3, 2011 Ficaria algo assim: $sql->select() ->from(array('p'=>'cliente')) ->where(sprintf('%s LIKE ?', $coluna), $option) ->order("idCliente"); Só que você não pode esquecer que o LIKE precisa do % antes e/ou depois da string de busca. Outra coisa é que você está misturando camadas. A montagem da SQL de busca deve ser feita no Model, e não no controller. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Soaress 0 Denunciar post Postado Julho 4, 2011 Olá Carlos obrigado pela ajuda. Estou apredendo a trabalhar com o zend. Refiz aqui: (cada macaco no seu galho). Model: public function busca($coluna, $option) { try { if (!empty($coluna)) $where = $this->select() ->from('cliente') ->where(sprintf('%s LIKE ', $coluna), sprintf(" '%%%s%%' " , $option)); return $where->query()->fetchAll(); } catch (Zend_Db_Exception $e) { echo $e->getMessage(); } } Controller: public function buscaAction() { $form = new Application_Form_Busca(); if($this->_request->isPost()) { $option = $this->_request->getPost('option'); $coluna = $this->_request->getPost('coluna'); if (!empty($coluna)) { $sql = new Application_Model_Cliente(); $dados = $sql->busca($coluna, $option); $this->view->form = $form; if ($dados > 0) { $this->view->rows = $dados; } } }else { $this->view->form = $form; //$this->_redirect('/cliente/busca'); } } Quando busco por um nome Ex: Timoteo (tabela=cliente, coluna=mome) Me retorne este erro: 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 ')' at line Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 4, 2011 Seu where tem um problema. ->where(sprintf('%s LIKE ', $coluna), sprintf(" '%%%s%%' " , $option)); Troque por: ->where(sprintf('%s LIKE ?', $coluna), sprintf("%%%s%%" , $option)); Veja se funciona. Se não funcionar, para efeito de debug, dê um echo $where antes do fetchAll() e encerre o script(exit ou die). Algo assim: public function busca($coluna, $option) { try { if (!empty($coluna)) $where = $this->select() ->from('cliente') ->where(sprintf('%s LIKE ?', $coluna), sprintf("%%%s%%" , $option)); echo $where; exit(); return $where->query()->fetchAll(); } catch (Zend_Db_Exception $e) { echo $e->getMessage(); } } Veja o que retorna e veja se localiza o erro do SQL. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Soaress 0 Denunciar post Postado Julho 4, 2011 Obrigado Matias, Deu certo. O Carlos tinha passado a formula, porem quando fui refazer esqueci de colocar o bendito "?". Deus Abencoe a todos!!!! Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 4, 2011 Então, o Carlos e o Matias sou eu... :P Sobre o ?, é a forma que o Zend encontra os parâmetros a serem substituídos. Só que, pelo menos nesta versão, é 1 parâmetro por condição só. Então, ele substitui o ? pelo segundo parâmetro do where(). O terceiro parâmetro é o tipo de valor que pode ser aceito. Por exemplo, para obrigar um valor a ser inteiro: ->where('coluna = ?', $var, Zend_Db::INT_TYPE); Aí ele não adiciona as aspas (colocar aspas em números inteiros em uma query é um erro) e converte $var para um inteiro. Carlos Eduardo (Matias Rezende :P) Compartilhar este post Link para o post Compartilhar em outros sites