[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Что за странная ошибка?
abdula81
Всем доброго дня. Не пойму в чем причина.
Потребовалось быстро создать небольшой кусок кода, в котором используется другая БД нежели основная. НА скорую руку создал простую функцию и законнектился.

functio newfunc(){

$db2 = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);

$query = "SELECT `id` FROM `tab` WHERE `id` = '".intval($id)."' LIMIT 1";
$result = $db2->query($query);
$row = $result->fetch(); //1
if(empty($row)){
return false;
}

//... немного лишнего кода ...

$result = null;

$query = "UPDATE `tab` SET `active` = '1' WHERE `id` = '".intval($id)."' LIMIT 1";
$result = $db2->query($query); //2
var_dump($result);

$db2 = null;

}


Как строка с комментарием //1 может влиять на //2?
Я честно первый раз сталкиваюсь с этим. Пришлось делать $result = null; чтобы второй запрос выполнился. Какая вообще связь между ними? Я ведь $result = $db2->query($query); переназначаю.
Arh
А что за ошибка то?

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
AllesKlar
А у тебя там точно LIMIT 1 в твоем скрипте? И id - primary key ?
А то...
Цитата
Если после выполнения предыдущего запроса вы не выбрали все данные из результирующего набора, следующий вызов PDO::query() может потерпеть неудачу. В таких случаях следует вызывать метод PDOStatement::closeCursor(), который освободит ресурсы базы данных, занятые предыдущим объектом PDOStatement. После этого можно безопасно вызывать PDO::query().

http://be2.php.net/manual/ru/pdo.query.php

_____________
[продано копирайтерам]
abdula81
Arh
К сожалению ошибку я не записал. Она была связана с тем, что fetch() не давал мне выполнить СЛЕДУЮЩИЙ запрос. Как поменял на fetchAll всё стало нормально. Я не хотел бы сейчас снова код менять, тк проект уже в работе. Просто меня смутило то, при чем тут первый запрос и второй. Ну бред же.

AllesKlar
Ну да, первичный ключ id. LIMIT по привычке потому что мне нужно всего одно значение, хотя они так одно там. Какое дело PDO до того как именно я пишу запрос?)

Цитата
В таких случаях следует вызывать метод PDOStatement::closeCursor(), который освободит ресурсы базы данных, занятые предыдущим объектом PDOStatement.

ну этого я больше всего боялся. зависимость. но видимо это то что и нужно.
хотя я решил вопрос нестандартно $result = null; что даже мне не понятно как заработало)
abdula81
Всё таки решил разобраться. Вот ошибка.

Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.