Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

no puedo hacer un consulta DQL usuando multiples variables.

Estas en el tema de no puedo hacer un consulta DQL usuando multiples variables. en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola comunidad, he estado practicando con Doctrine y de verdad es bastante bueno. Hoy intente hacer un nuevo tipo de consulta, algo como para buscar ...
  #1 (permalink)  
Antiguo 07/02/2011, 21:54
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
no puedo hacer un consulta DQL usuando multiples variables.

Hola comunidad, he estado practicando con Doctrine y de verdad es bastante bueno.
Hoy intente hacer un nuevo tipo de consulta, algo como para buscar en los registros de una tabla.

esta es la forma como tengo ahora la consulta:
Código PHP:
Ver original
  1. $q = Doctrine_Query::CREATE()
  2.             ->select($select)
  3.             ->from($from)
  4.             ->where("$camp1  LIKE %$incognita%  OR $camp2 LIKE %$incognita% OR $camp3 LIKE %$incognita%");

El manual dice que debo usar un ? despues de like, ademas no estoy seguro de que $select, $from se puedan colocar así nomas, pero lo puse porque estube probando inprimiendo $q->getSqlQuery() y entonces la consulta se crea hasta el punto de los LIKE donde tengo problemas.

dejo como hago la cadena $select y $from:
Código PHP:
Ver original
  1. $select = "$camp1 AS camp1, $camp2 AS camp2, $camp3 AS camp3, $camp5 AS camp5";
  2. $from = $ar['tabla']." t";

y tambien el resultado de $q->getSqlQuery();
Código PHP:
Ver original
  1. SELECT c.idcliente AS c__0, c.nombre AS c__1, c.apellido AS c__2, c.fotourl AS c__3 FROM cliente c WHERE (c.idcliente LIKE %lui% OR c.nombre LIKE %lui% OR c.apellido LIKE %lui%)

No cuando hago un fetcharray de $q me salen un monton de errores.
Código PHP:
Ver original
  1. Fatal error: Uncaught exception 'Doctrine_Connection_Pgsql_Exception' with message 'SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "%" LINE 1: ...rl AS c__3 FROM cliente c WHERE (c.idcliente LIKE %lui% OR c... ^. Failing Query: "SELECT c.idcliente AS c__0, c.nombre AS c__1, c.apellido AS c__2, c.fotourl AS c__3 FROM cliente c WHERE (c.idcliente LIKE %lui% OR c.nombre LIKE %lui% OR c.apellido LIKE %lui%)"' in /var/www/proyect/system/database/doctrine/Doctrine/Connection.php:1082 Stack trace: #0 /var/www/proyect/system/database/doctrine/Doctrine/Connection.php(1025): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Pgsql), 'SELECT c.idclie...') #1 /var/www/proyect/system/database/doctrine/Doctrine/Query/Abstract.php(976): Doctrine_Connection->execute('SELECT c.idclie...', Array) #2 /var/www/proyect/system/database/doctrine/Doctrine/Query/Abstract.php(1026): Doctrine_Query_Abstract->_execute(Array) #3 /var/www in /var/www/proyect/system/database/doctrine/Doctrine/Connection.php on line 1082
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #2 (permalink)  
Antiguo 07/02/2011, 22:06
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: no puedo hacer un consulta DQL usuando multiples variables.

Porque debes encerrar entre comillas los valores que tienen el %.
LIKE '%algo%'
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 07/02/2011, 22:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: no puedo hacer un consulta DQL usuando multiples variables.

Las variables tienen que ir entre comillas simples, desconozco como lo hace Doctrine pero en Zend podrías hacer algo así:
Código PHP:
Ver original
  1. $select = $db->select();
  2. $select->from('tabla')
  3.            ->where('apellido LIKE ?', '%' . $var . '%')
  4.            ->where('otra_col = ?', $otra_var);

Es por eso que te da error.

Saludos.
  #4 (permalink)  
Antiguo 08/02/2011, 02:54
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: no puedo hacer un consulta DQL usuando multiples variables.

Con DQL debería ser algo así:

Código PHP:
Ver original
  1. $q = Doctrine_Query::create()
  2.             ->select($select)
  3.             ->from($from)
  4.             ->where('? LIKE ?', array($camp1, '%' . $incognita . '%'))
  5.             ->orWhere('? LIKE ?', array($camp2, '%' . $incognita . '%'))
  6.             ->orWhere('? LIKE ?', array($camp3, '%' . $incognita . '%'));

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 08/02/2011, 08:21
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: no puedo hacer un consulta DQL usuando multiples variables.

muchas gracias a todos, aplique lo que me dijo masterpuppet que esta orientado a Doctrine, aun no tengo un resultado satisfactorio os dejo todo la clase quiza este haciendo algo mal y no me este dando cuenta:

Cuando ejecuto este codigo en la pagina me dice que "Pagina no disponible" como que si no lo encontrara y no lo entiendo porque si puedo por ejemplo imprimir la consulta.
Código PHP:
Ver original
  1. class Buscador{
  2.    
  3.     function bgeneral($incognita,$ar){
  4.        
  5.         $from = $ar['tabla']." t";        
  6.         $camp1 = "t.".$ar['camp1'];
  7.         $camp2 = "t.".$ar['camp2'];
  8.         $camp3 = "t.".$ar['camp3'];
  9.         $camp4 = "t.".$ar['camp4'];
  10.         $camp5 = "t.".$ar['camp5'];
  11.  
  12.         if($ar['camp4'] == 0){            
  13.             $select = "$camp1 AS camp1, $camp2 AS camp2, $camp3 AS camp3, $camp5 AS camp5";
  14.             echo "camino if<br>";
  15.         }else{
  16.             $select = "$camp1 AS camp1, $camp2 AS camp2, $camp3 AS camp3, $camp4 AS camp4, $camp5 AS camp5";
  17.             echo "camino else<br>";
  18.         }
  19.         $q = Doctrine_Query::CREATE()
  20.                 ->select($select)
  21.                 ->from($from)
  22.                 ->where('? LIKE ?', array($camp1,'%',$incognita,'%'))
  23.                 ->orWhere('? LIKE ?', array($camp2,'%',$incognita,'%'))
  24.                 ->orWhere('? LIKE ?', array($camp3,'%',$incognita,'%'));
  25.  
  26.        
  27.        // echo $q->getSqlQuery()."<br>";    
  28.         $rs = $q->fetchArray();
  29.         echo "<pre>";
  30.         print_r($rs);
  31.  
  32.     }
  33. }

Lo curioso en esto es que cuando hago $ar['tabla']." t"; da como resultado por ejemplo en la tabla clientes 'cliente c' esto no se como lo hace pero así lo veo al imprimir la consulta que es esta:

Código PHP:
Ver original
  1. SELECT c.idcliente AS c__0, c.nombre AS c__1, c.apellido AS c__2, c.fotourl AS c__3 FROM cliente c WHERE (? LIKE ? OR ? LIKE ? OR ? LIKE ?)
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com

Última edición por Copia; 08/02/2011 a las 08:23 Razón: falto especificar
  #6 (permalink)  
Antiguo 08/02/2011, 08:36
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: no puedo hacer un consulta DQL usuando multiples variables.

El error sigue siendo el mismo ?, igual en el DQL estas poniendo "," donde debería ser "." y el create es en minúscula.

mal
Código PHP:
Ver original
  1. array($camp1,'%',$incognita,'%')

bien
Código PHP:
Ver original
  1. array($camp1,'%' . $incognita . '%')
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 08/02/2011, 09:41
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: no puedo hacer un consulta DQL usuando multiples variables.

o no que descuido mio :S.
Gracias, ya esta solucionado.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #8 (permalink)  
Antiguo 08/02/2011, 10:37
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: no puedo hacer un consulta DQL usuando multiples variables.

Esta consulta es la ultima, pense que seria igual que la anterior pero no lo es, esta vez cuando hay dos incognitas en el where.
Código PHP:
Ver original
  1. $tabla = $ar['tabla'].' t';
  2.         $id = 't.'.$ar['id'];
  3.         $camp1 = 't.'.$ar['camp1'];
  4.  
  5.        
  6.         $q = Doctrine_Query::CREATE()
  7.             ->select($select)
  8.             ->from($tabla)
  9.             ->where('? = ?',array($camp1,"$id"));
  10.        
  11.         $rs = $q->fetchArray();

también probé con where("$camp1 = ?", $id); y salta el error, supongo que esta cuestión nunca funcionaria de esa forma y yo insisto.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #9 (permalink)  
Antiguo 08/02/2011, 13:16
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: no puedo hacer un consulta DQL usuando multiples variables.

Supongo que te quotea el campo y por eso no tira, probalo asi:
Código PHP:
Ver original
  1. $tabla = $ar['tabla'] . ' t';
  2. $id    = 't.' . $ar['id'];
  3. $camp1 = 't.' . $ar['camp1'];
  4.          
  5. $q = Doctrine_Query::create();
  6. $q->select($select)
  7.   ->from($tabla)
  8.   ->where(sprintf('%s = ?', $camp1), array($id));
  9.        
  10. $rs = $q->fetchArray();
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 08/02/2011, 17:44
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: no puedo hacer un consulta DQL usuando multiples variables.

muchas gracias ya funciono esa consulta. Pero estoy teniendo problemas con la primera consulta que puse:
Código PHP:
Ver original
  1. $q = Doctrine_Query::CREATE()
  2.                 ->select($select)
  3.                 ->from($from)
  4.                 ->where('? LIKE ?', array($camp1,'%'.$incognita.'%'))
  5.                 ->orWhere('? LIKE ?', array($camp2,'%'.$incognita.'%'))
  6.                 ->orWhere('? LIKE ?', array($camp3,'%'.$incognita.'%'));

Pasa que no errores en sintaxis, sino que cuando testeo una busqueda no funciona. Si ingreso una letra como l, muestra resultado si son mas de una letra no muestra ninguno y si envio vacio me muestra todos los resultados.

Estube probando con mysql y la sentencia me funciona perfectamente, hasta con numeros me funciona porque $camp1 busca en id.

¿Que puede estar pasando?
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com

Última edición por Copia; 09/02/2011 a las 11:35
  #11 (permalink)  
Antiguo 10/02/2011, 08:04
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: no puedo hacer un consulta DQL usuando multiples variables.

Ya esta resuelto, era una falla mia .

Gracias saludos.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com

Etiquetas: multiples, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:42.