Я хочу получить первые четыре строки, второй grooup из четырех строк и так далее до конца таблицы MySQL с именем Productos. Если я сделаю запросы из значений PHPMyAdmin, они будут восстановлены правильно. Но когда я пытаюсь получить их из PHP, значения не получаются.
Код:
$this -> minimo = $_GET["minimo"];
echo "</br>" . $this -> minimo;
$this -> qry = "SELECT nombre,descripcion,precio,foto FROM productos
LIMIT ?,4";
$this -> sqry = $this -> conexion -> prepare($this -> qry);
$this->sqry->bindParam(1,$this -> minimo,PDO::PARAM_INT);
$this -> sqry -> execute();
echo "</br>"; var_dump($this -> sqry);
$this -> resul = $this -> sqry -> fetchAll();
echo "Resul es " ; var_dump($this -> resul);
После запуска скрипта я смотрю следующее:
0
object(PDOStatement)#4 (1) {
["queryString"]=> string(62) "SELECT nombre,descripcion,precio,foto FROM productos LIMIT ?,4" }
Resul es array(0) { }
Как я могу получить значения?
Спасибо
Поскольку вы используете ленивую загрузку, т.е. Массив в параметре execute
$this -> sqry -> execute(array($this -> minimo));
Все параметры обрабатываются как строки, которые будут генерировать
LIMIT '1', 4
И '1'
- это незаконный синтаксис
Таким образом, вы должны указать тип, подобный этому
$this->minimo = $_GET["minimo"];
$this->qry = "SELECT nombre,descripcion,precio,foto FROM productos LIMIT ?,4";
$this->sqry = $this->conexion->prepare($this->qry);
$this->sqry->bindParam(1, $this->minimo, PDO::PARAM_INT);
$this->sqry->execute();
$this->resul = $this->sqry->fetchAll();
// now $this->resul should be an array of arrays unless
// you have set PDO up to return Object by default
// so a simple print_r() should show you whats in the returned data
print_r($this->resul);
В качестве альтернативы вы можете отключить Emulated Preparation в качестве части вашего соединения и продолжить использование метода Lazy Load
$this->conexion->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
$this->minimo = $_GET["minimo"];
$this->qry = "SELECT nombre,descripcion,precio,foto FROM productos LIMIT ?,4";
$this->sqry = $this -> conexion -> prepare($this -> qry);
$this->sqry->execute(array($this -> minimo));
$this->resul = $this -> sqry -> fetchAll();
Если вам просто нужны первые 4 строки, вы можете использовать
LIMIT 4
но, вероятно, было бы неплохо добавитьORDER BY
чтобы убедиться, что вы получите правильные первые 4 строки, может быть, как этотLIMIT 4 ORDER BY id
LIMIT 4
и посмотрите, возвращает ли запрос реальные данные строки
$this -> resul
а не$this -> result
?LIMIT 4