Código PHP:
Ver original
//devuelve todos los productos que sean de la $Categoria public static function obtenerTodosPorCategoria($categoria, $ultimoID= 0, $inicio= 0, $offset= 5){ //se comprueba de que se haya enviado algun valor y que sea un string $retorno= null; $link= Conexion::conectar(); //se obtiene el id de la categoria $categoriaID= CategoriaDAO::obtenerID($categoria); if ($link == null) return ProductoDAO::$conexionNull; $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $consulta= $link->prepare("SELECT * FROM producto WHERE idCategoria = ? AND idProducto > ? LIMIT ? OFFSET ?;"); $resultado= $consulta->fetchAll(); //$_Tupla es de tipo PDOStatement foreach ($resultado as $tupla){ $productoTemp= new Producto(); $productoTemp->setId($tupla['idProducto']); $productoTemp->setNombre($tupla['nombre']); $productoTemp->setPrecio($tupla['precio']); $productoTemp->setStock($tupla['stock']); $productoTemp->setCategoria($tupla['idCategoria']); $productoTemp->setPathImagen($tupla['imagen']); $productoTemp->setDescripcion($tupla['descripcion']); }//fin foreach ($_Link->query($_Consulta) as $_Tupla) //se desconecta de la base de datos Conexion::desconectar($link); return $retorno; }//fin BuscarTodosPorCategoria($Categoria)
me devuelve la siguiene excepcion.
Fatal error: Uncaught exception 'PDOException' with 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 ''0' OFFSET '5'' at line 1' in C:\xampp\htdocs\hastamicasa\DAO\ProductoDAO.php:28 9 Stack trace: #0 C:\xampp\htdocs\hastamicasa\DAO\ProductoDAO.php(28 9): PDOStatement->execute(Array) #1 C:\xampp\htdocs\hastamicasa\ajax\obtenerproductos. php(12): ProductoDAO::obtenerTodosPorCategoria('limpieza') #2 {main} thrown in C:\xampp\htdocs\hastamicasa\DAO\ProductoDAO.php on line 289
ahora, si cambio la consulta de la linea 22 por la siguiente no causa problemas:
Código SQL:
Ver original
SELECT * FROM producto WHERE idCategoria = ? AND idProducto > ? LIMIT 0 OFFSET 0;
por lo que el problema esta en LIMIT.... tambien probe las siguiente consulta, con el mismo resultado:
Código SQL:
Ver original
SELECT * FROM producto WHERE idCategoria = ? AND idProducto > ? LIMIT ?,?;
mismo problema.
Dando vueltas por internet, me encontre con que tendria que cambiar los signos de interrogacion por "variables" (o como se llamen, ahora lo ven):
Código SQL:
Ver original
--cambiando lineas 22 y 24 por las siguientes $consulta= $link->PREPARE("SELECT * FROM producto WHERE idCategoria= :categoria AND idProducto > :producto LIMIT :inicio OFFSET :offset;", array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $consulta->EXECUTE(array(':categoria' =>$categoriaID, ':producto' => $ultimoID, ':inicio' => $inicio, ':offset' => $offset));
lo anterior segun la documentacion de php
Esto me esta comiendo la cabeza y quisiera saber si alguien tuvo el mismo problema y pudo solucionarlo. En caso de que lo hayan echo, preferiria que la solucion sea usando los signos de interrogacion.
Por el momento voy a seguir buscando la solucion
saludos y gracias