Значения, не возвращенные в команде PDO fetchAll

0

Я хочу получить первые четыре строки, второй 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) { } 

Как я могу получить значения?

Спасибо

  • 0
    Предполагается, что это $this -> resul а не $this -> result ?
  • 0
    Тогда вы должны LIMIT 4
Показать ещё 1 комментарий
Теги:
pdo

1 ответ

3
Лучший ответ

Поскольку вы используете ленивую загрузку, т.е. Массив в параметре 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

  • 0
    Спасибо за ответ, но он не запускается. Нет ошибок, но когда я хочу узнать значения resul и $ this -> minimo, появляются сообщения, которые я обновил в вопросе.
  • 0
    Хорошо, если вам нужно только 4 строки, попробуйте изменить запрос на использование LIMIT 4 и посмотрите, возвращает ли запрос реальные данные строки
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню