Как сделать два запроса через одно подключение PDO?

143
15 декабря 2016, 15:45
$DBH = new PDO("mysql:host=".HOST.";dbname=".DB_NAME, USER, PASSWORD);
$DBH->exec('SET NAMES utf8');
$postsH = $DBH->query("SELECT * FROM `posts` ORDER BY `id` DESC");
$posts = '';
while($row = $postsH->fetch(PDO::FETCH_ASSOC)){
    $DB = new PDO("mysql:host=".HOST.";dbname=".DB_NAME, USER, PASSWORD);
    $DB ->exec('SET NAMES utf8');
    $catH = $DB->query("SELECT * FROM `cats` WHERE `id` = '$row[cat]'");
    $cat = $catH->fetch(PDO::FETCH_ASSOC);      
    $posts .= "$row[text], ";
}

В таком случае код работает. Если создать новый объект (new PDO). Если же попробовать подключиться через старый объект, то возникает ошибка, запрос не удается, и нельзя использоваться fetch, потому что результатом запроса является false, а не объект. Как использовать первое подключение без создания нового?

Вот так не работает:

 while($row = $postsH->fetch(PDO::FETCH_ASSOC)){
        $catH = $DBH->query("SELECT * FROM `cats` WHERE `id` = '$row[cat]'");
    $cat = $catH->fetch(PDO::FETCH_ASSOC);       
        $posts .= "$row[text], ";
    }
Answer 1

Если после выполнения предыдущего запроса вы не выбрали все данные из результирующего набора, следующий вызов PDO::query() может потерпеть неудачу. В таких случаях следует вызываеть метод PDOStatement::closeCursor(), который освободит ресурсы базы данных занятые предыдущим объектом PDOStatement. После этого можно безопасно вызывать PDO::query().

Источник: http://www.php.net/manual/ru/pdo.query.php

READ ALSO
Проблема с базой данных

Проблема с базой данных

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

201
Запрос INSERT в YII

Запрос INSERT в YII

Можно ли проверить значения, которые передает запрос INSERT в YII? Дело в том, что при добавлении записи вылетает следошибка:

194
MySQL соответствие поля шаблону

MySQL соответствие поля шаблону

Доброго времени сутокПочему не получается сделать соответствие поля регулярному выражению- ни одна документация не запрещает это (вроде...

176
Mysql_fetch_row() проблема [дубликат]

Mysql_fetch_row() проблема [дубликат]

На данный вопрос уже ответили:

144