Foros del Web » Programando para Internet » PHP »

sql -> query -> PDO -> limit no funciona

Estas en el tema de sql -> query -> PDO -> limit no funciona en el foro de PHP en Foros del Web. Quiero solo los tres últimos pero me devuelve todos Código PHP: $noticias  =  $this -> _db -> query ( "SELECT * FROM noticias WHERE id ORDER BY id DESC LIMIT 3" ); return  $noticias -> fetchall ...
  #1 (permalink)  
Antiguo 14/05/2014, 18:45
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
sql -> query -> PDO -> limit no funciona

Quiero solo los tres últimos pero me devuelve todos

Código PHP:
$noticias $this->_db->query("SELECT * FROM noticias WHERE id ORDER BY id DESC LIMIT 3");
return 
$noticias->fetchall(); 
  #2 (permalink)  
Antiguo 14/05/2014, 18:53
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: sql -> query -> PDO -> limit no funciona

Pues hay varios reportes de ese comportamiento (bug?) y preguntas en Stackflow con solucion:

http://stackoverflow.com/questions/5...mit-and-offset
__________________
Salu2!
  #3 (permalink)  
Antiguo 14/05/2014, 19:50
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: sql -> query -> PDO -> limit no funciona

gracias italico76, yo también los he visto

he probado basandome en esos ejemplos pero nada

Código PHP:
$noticias $this->_db->query("SELECT * FROM noticias ORDER BY id DESC LIMIT :inicio, :fin");
$noticias->bindValue(':inicio'0PDO::PARAM_INT);
$noticias->bindValue(':fin'2PDO::PARAM_INT);
return 
$noticias->fetchall(); 
  #4 (permalink)  
Antiguo 14/05/2014, 19:54
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: sql -> query -> PDO -> limit no funciona

Amigo... no uso PDO pero segun el manual bindValue() se usa con execute() asi que el fechall() no va:

http://www.php.net/manual/en/pdostatement.bindvalue.php
__________________
Salu2!
  #5 (permalink)  
Antiguo 15/05/2014, 06:45
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: sql -> query -> PDO -> limit no funciona

Parece que así funciona

Código PHP:
$noticias $this->_db->query("SELECT * FROM noticias ORDER BY id DESC LIMIT 1, 2"); 
return 
$noticias->fetchall();  
$noticias->setAttribute(PDO::ATTR_EMULATE_PREPARESfalse); 
  #6 (permalink)  
Antiguo 15/05/2014, 07:49
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
Respuesta: sql -> query -> PDO -> limit no funciona

podrias usar pdo con un orm como doctrine , funciona bastante bien y es sencillo usarlo (puedes usar pdo).

http://doctrine-dbal.readthedocs.org...html#pdo-mysql

Saludos
  #7 (permalink)  
Antiguo 15/05/2014, 07:50
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
Respuesta: sql -> query -> PDO -> limit no funciona

podrias usar pdo con un orm como doctrine , funciona bastante bien y es sencillo usarlo .

http://doctrine-dbal.readthedocs.org...html#pdo-mysql

Saludos
  #8 (permalink)  
Antiguo 15/05/2014, 10:23
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 2 meses
Puntos: 36
Respuesta: sql -> query -> PDO -> limit no funciona

La sintaxis de SQL con el LIMIT es:


Código:
LIMIT inicio, fin
Cita:
Iniciado por quico5 Ver Mensaje
gracias italico76, yo también los he visto

he probado basandome en esos ejemplos pero nada

Código PHP:
$noticias $this->_db->query("SELECT * FROM noticias ORDER BY id DESC LIMIT :inicio, :fin");
$noticias->bindValue(':inicio'0PDO::PARAM_INT);
$noticias->bindValue(':fin'2PDO::PARAM_INT);
return 
$noticias->fetchall(); 
Este ejemplo que utilizas esta mal. Estas intentando ligar (bind) parametros sin haber preparado el statement ( prepare() ).


Cita:
Parece que así funciona

Código PHP:
$noticias = $this->_db->query("SELECT * FROM noticias ORDER BY id DESC LIMIT 1, 2");
return $noticias->fetchall();
$noticias->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Aquí
Cita:
$noticias->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
no es necesario, con solo el hecho de utilizar query() y enviarle la consulta sin parametros se ejecuta.


Estas extrayendo malo datos, debes de usar
Cita:
fetchAll()
fijate en la mayúscula.


Utiliza este código para obtener la información:

Código PHP:
$from 0;
$to 3;
$noticias $this->_db->prepare("SELECT * FROM noticias WHERE id ORDER BY id DESC LIMIT ?,?"); 
$noticias->execute(array($from,$to));
return 
$noticias->fetchAll(); 
Estoy creando una libreria para manejar todo este tipo de datos y evitar eso tan molesto, si estas interesado en utilizarla con gusto te la puedo compartir.


Saludos.
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #9 (permalink)  
Antiguo 15/05/2014, 13:50
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: sql -> query -> PDO -> limit no funciona

Gracias por responder, he probado tu código pero por alguna estaña razón que desconozco no me devuelve nada

Me gustaría poder probar tu librería

El tema de LIMIT en PDO parece que da bastantes problemas
  #10 (permalink)  
Antiguo 22/05/2014, 08:47
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 2 meses
Puntos: 36
Respuesta: sql -> query -> PDO -> limit no funciona

Cita:
Iniciado por quico5 Ver Mensaje
Gracias por responder, he probado tu código pero por alguna estaña razón que desconozco no me devuelve nada

Me gustaría poder probar tu librería

El tema de LIMIT en PDO parece que da bastantes problemas

La razón es por que el execute te esta convirtiendo los valores enteros a cadenas. Aprovechando el tema implemente esta funcionalidad en mi libreria. Por el momento no he puesto un tutorial de como utilizarla, por el momento te comparto el link donde la tengo (GitHub) y si te interesa te explico como funciona.

Repo en GitHub: https://github.com/Reedyseth/Arkbase

Practicamente tu consulta quedaría así:

Código PHP:
require_once("arkbase.php");
$arkbase = new Arkbase();

$sql "SELECT * FROM noticias ORDER BY id DESC LIMIT ?,?";
// Param 1 Query.
// Param 2 Arreglo de valores,
// Param 3 Arreglo de los tipos de datos de cada valor, van en orden.
$data $arkbase->query_all_data_exact($sql, array(0,3),array('int','int')); 
$data es un arreglo asociativo de objetos, para extraer los datos lo haces con un foreach y accedes a cada columna con su nombre. Suponiendo que tienes dos columnas, name y email, entonces para obtener sus datos hace algo así:

Código PHP:
foreach ($data as $row) {
     echo 
$row->name;
     echo 
$row->email;

Parece un poco complicada pero veras que te vas a ahorrar muchos problemas.

Saludos.!!
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #11 (permalink)  
Antiguo 22/05/2014, 09:08
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: sql -> query -> PDO -> limit no funciona

Estos dias lei una entrada de un blog... creo le apunta a lo mismo que @Reedyseth

Sino es asi... lei rapido aqui y alla
__________________
Salu2!
  #12 (permalink)  
Antiguo 22/05/2014, 09:18
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: sql -> query -> PDO -> limit no funciona

No te limites te dejo dos opciones:
http://doctrine-dbal.readthedocs.org...y-builder.html
http://fluentpdo.com/documentation.html
Las dos implementan el patrón query object (query builder). te vas ahorrar muchos problemas
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #13 (permalink)  
Antiguo 22/05/2014, 10:38
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 2 meses
Puntos: 36
Respuesta: sql -> query -> PDO -> limit no funciona

Como menciono arriba, el problema es que execute te convierte a cadena los valores y ya para no entrar en mas detalles, el problema lo vas a solucionar definiendo explicitamente que vas a enviarle enteros, por lo tanto con lo que tienes te debe de quedar así:

Código PHP:
$from 0;
$to 3;
$noticias $this->_db->prepare("SELECT * FROM noticias WHERE id ORDER BY id DESC LIMIT ?,?"); 
$noticias->bindParam(1,$from,PDO::PARAM_INT);
$noticias->bindParam(2,$to,PDO::PARAM_INT);
$noticias->execute();
return 
$noticias->fetchAll(); 
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #14 (permalink)  
Antiguo 22/05/2014, 12:40
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: sql -> query -> PDO -> limit no funciona

La verdad hay ciertas cosas que no veo bien aquí:

Código MySQL:
Ver original
  1. SELECT * FROM noticias WHERE id ORDER BY id DESC LIMIT ?,?

No se supone que en la sentencia anterior debe existir una comparación para que funcione ???

WHERE id = 'algo' - WHERE id != 'algo' ahi simplemente colocan WHERE id ORDER BY a mi me parece que debería saltar error al ejecutar ese código, te aconsejo que uses excepciones para ver que es lo que pasa...!

2. para que usar BindParam en un código tan sencillo... eso se utiliza para enlazar variables por referencia como me lo explico algún día GatorV. Te invito a que leas el tema que es espectacular la forma en que me explica como funciona PDO
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???

Última edición por jotaincubus; 22/05/2014 a las 12:56
  #15 (permalink)  
Antiguo 23/05/2014, 20:12
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 2 meses
Puntos: 36
Respuesta: sql -> query -> PDO -> limit no funciona

Cita:
Iniciado por jotaincubus Ver Mensaje
La verdad hay ciertas cosas que no veo bien aquí:

Código MySQL:
Ver original
  1. SELECT * FROM noticias WHERE id ORDER BY id DESC LIMIT ?,?

No se supone que en la sentencia anterior debe existir una comparación para que funcione ???

WHERE id = 'algo' - WHERE id != 'algo' ahi simplemente colocan WHERE id ORDER BY a mi me parece que debería saltar error al ejecutar ese código, te aconsejo que uses excepciones para ver que es lo que pasa...!

2. para que usar BindParam en un código tan sencillo... eso se utiliza para enlazar variables por referencia como me lo explico algún día GatorV. Te invito a que leas el tema que es espectacular la forma en que me explica como funciona PDO
Tienes razón en eso, se me escapó , Si hay que quitar el WHERE id
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.

Etiquetas: sql
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 19:53.