Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Написал процедуру...

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ytrewq123
Отправлено: 13 Октября, 2017 - 11:35:23
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Здравствуйте!
Вот такая интересность.
Написал процедуру. Всё норма.
PHP:
скопировать код в буфер обмена
  1. $so->query("DROP PROCEDURE prooo1");
  2. $ppp = $so->query("CREATE PROCEDURE IF NOT EXISTS prooo1(IN ar INT(11))
  3.                    BEGIN
  4.                    SELECT * FROM tabla WHERE id=ar;
  5.                    END
  6.                    ");
  7. if($ppp===false){print_r($so->errorInfo());}


Думаю вызову ещё раз.
PHP:
скопировать код в буфер обмена
  1. $rez = $so->query("CALL prooo1(1)");
  2. if($rez===false){print_r($so->errorInfo());}
  3. print_r($rez->fetchAll(PDO::FETCH_ASSOC));

А тута такое!!!
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.

Думаю, гадаю, читаю. Но не понимаю.
Ибо написав так, всё хорошо.
PHP:
скопировать код в буфер обмена
  1. $rez = $so->query("SELECT * FROM tabla WHERE id='1'");
  2. if($rez === false)print_r($so->errorInfo());
  3. print_r($rez->fetch(PDO::FETCH_ASSOC));
  4.  
  5. $rez = $so->query("SELECT * FROM tabla WHERE id='2'");
  6. while($str = $rez->fetch(PDO::FETCH_NUM))
  7. {
  8.     echo $str[1].'<br/>';
  9. }

Не подскажите в чём проблема. Что за не буферизированный запрос и откуда? Вроде по умолчанию все буферизированные. Это что-то в процедурах???
 
 Top
Мелкий Супермодератор
Отправлено: 13 Октября, 2017 - 13:06:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Используйте или mysql или хранимки. Не надо хранимки в mysql. Там граблей выше крыши.

Вероятно вы для create procedure не сделали fetchAll. Или возможно closeCursor надо вызвать. Нет mysql под рукой для экспериментов, а так не помню.


-----
PostgreSQL DBA
 
 Top
ytrewq123
Отправлено: 13 Октября, 2017 - 13:17:48
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Спасибо. Порою ещё и буду внимательно и аккуратно их применять.
 
 Top
ytrewq123
Отправлено: 13 Октября, 2017 - 18:37:06
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Может кому пригодится!
Почитать тута.
https://habrahabr[dot]ru/post/21326/
Ну и получилось надо после каждого вызова процедуры писать это.
while($rez->nextRowset()){}
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB