[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с PDO
mlitkin
Возникла проблема при использовании двух подгодотовленных запросов одновременно.
Вот такой код работает:
Код
//Готовим запрос для получения наименования таблицы
$qryTableName = $pdo->prepare("select NAME from SYS_SYNC_TABLES where ID = :ID");
$qryTableName->bindParam('ID', $tableID, PDO::PARAM_INT);

//Готовим запрос по столбцам синхронизации
$qryColumns = $pdo->prepare("call SYS_GET_SYNC_TABLE_COLUMNS(:TABLE_ID)");        
$qryColumns->bindParam('TABLE_ID', $tableID, PDO::PARAM_INT);

$tableID = 1;
$qryTableName->execute();
$res = $qryTableName->fetch();
if ($res)
  echo "<br>*** Таблица ".$res[NAME]." (ID = $tableID) ***<br>";

$tableID = 2;
$qryTableName->execute();
$res = $qryTableName->fetch();
if ($res)
  echo "<br>*** Таблица ".$res[NAME]." (ID = $tableID) ***<br>";

Т.е. выдаются данные для двух таблиц:
Код
*** Таблица SYS_SYNC_TABLES (ID = 1) ***

*** Таблица SYS_SYNC_COLUMNS (ID = 2) ***

А вот если добавить между двумя вызовами $qryTableName->execute(); еще вызов $qryColumns->execute();... Вот так:
Код
//Готовим запрос для получения наименования таблицы
$qryTableName = $pdo->prepare("select NAME from SYS_SYNC_TABLES where ID = :ID");
$qryTableName->bindParam('ID', $tableID, PDO::PARAM_INT);

//Готовим запрос по столбцам синхронизации
$qryColumns = $pdo->prepare("call SYS_GET_SYNC_TABLE_COLUMNS(:TABLE_ID)");        
$qryColumns->bindParam('TABLE_ID', $tableID, PDO::PARAM_INT);

$tableID = 1;
$qryTableName->execute();
$res = $qryTableName->fetch();
if ($res)
  echo "<br>*** Таблица ".$res[NAME]." (ID = $tableID) ***<br>";

/*!!!!!!*/$qryColumns->execute();

$tableID = 2;
$qryTableName->execute();
$res = $qryTableName->fetch();
if ($res)
  echo "<br>*** Таблица ".$res[NAME]." (ID = $tableID) ***<br>";

То второй вызов $qryTableName->execute(); уже не срабатывает и возвращается одна строка:
Код
*** Таблица SYS_SYNC_TABLES (ID = 1) ***

Может кто-нибудь подскажет в чем тут дело?



Спустя 8 часов, 17 минут, 57 секунд (27.03.2008 - 11:59) Драгон написал(а):
Дайте угадаю, ОС виндовс?

Спустя 14 часов, 17 минут, 17 секунд (28.03.2008 - 02:16) mlitkin написал(а):
Цитата(Драгон @ 27.3.2008, 18:59) [snapback]35725[/snapback]
Дайте угадаю, ОС виндовс?

Именно. А в чем здесь проблема?

Спустя 17 часов, 4 минуты, 1 секунда (28.03.2008 - 19:20) lenich написал(а):
Цитата
Именно. А в чем здесь проблема?

Вот вот.
Цитата
$qryTableName = $pdo->prepare("select NAME from SYS_SYNC_TABLES where ID = :ID");
...
$qryColumns = $pdo->prepare("call SYS_GET_SYNC_TABLE_COLUMNS(:TABLE_ID)");

и тут и тут хендлер базы $pdo - естественно, что у вас вылетает при 2 запросе ибо хендлер то один - пытаетесь 2 трамвая пустить одновременно по одной колее вот они и сталкиваются. Запрос с qryColumns делайте с помощью отдельного подключения к бд, либо после всех операций с qryTableName.
Цитата
$qryColumns = $pdo2->prepare("call SYS_GET_SYNC_TABLE_COLUMNS(:TABLE_ID)");
- ну поняли короче.
Быстрый ответ:

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