Запрос ограничения PDO не работает с использованием привязки в Execute

0

Я пытаюсь работать с лимитированным запросом. До сих пор я проверял следующее:

Все входные данные действительны и правильны. Запрос выполняется при ручном запуске в MySQL. Значения передаются в INT. Я даже скопировал переменные значения int.

       try {
             $sql = "SELECT * FROM sensor_data WHERE sid=:sid ORDER BY id DESC LIMIT :starting_limit, :recordlimit";
             $core = CoreDB::getInstance();
             $sth = $core->dbh->prepare($sql);
             $sth->execute(array(':sid' => $sensor->getID(),  ':starting_limit' => (int)0, ':recordlimit' => (int)10));
            // $sth->execute(array(':sid' => $sensor->getID()));
             $results = $sth->fetchAll();
             var_dump($sth->rowCount());
             if ($sth->rowCount() > 0) {
                 foreach($results as $row){
                   $id = $row['id'];
                   var_dump($id);
                   }
                 }
               }
               catch(Exception $e){
               }

Любые советы приветствуются

  • 0
    Определите « не работает ». Что var_dump ваш var_dump ? Вы всегда можете вывести результаты как $sth и $results в ваш catch()
  • 0
    @ObsidianAge Если я выполню этот запрос вручную, поместив 0 вместо: стоящий_лимит и 10 вместо: recordlimit, я получу переменную var_dump для количества строк, равного 8. Когда я делаю это, как показано выше, я получаю 0.
Показать ещё 2 комментария
Теги:
pdo

1 ответ

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

Единственное решение, которое я нашел, - это вручную привязать параметры, а не помещать их в массив в методе execute.

         try {
             $sql = "SELECT * FROM sensor_data WHERE sid=:sid ORDER BY id DESC LIMIT :starting_limit, :recordlimit";
             $core = CoreDB::getInstance();
             $sth = $core->dbh->prepare($sql);
             $sth->bindValue(':sid', $sensor->getID(), PDO::PARAM_INT);
             $sth->bindValue(':starting_limit', 0, PDO::PARAM_INT);
             $sth->bindValue(':recordlimit', 10, PDO::PARAM_INT);
             $sth->execute();
             $results = $sth->fetchAll();
             var_dump($sth->rowCount());
             if ($sth->rowCount() > 0) {
                 foreach($results as $row){
                   $id = $row['id'];
                   var_dump($id);
                   }
                 }
               }
               catch(Exception $e){
               }

Если кто-то знает, как заставить его работать в методе execute, пожалуйста, дайте мне знать, и я обновлю ответ.

Ещё вопросы

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