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
Форумы портала PHP.SU :: Версия для печати :: Написал процедуру...
Форумы портала PHP.SU » » Работа с СУБД » Написал процедуру...

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

1. ytrewq123 - 13 Октября, 2017 - 11:35:23 - перейти к сообщению
Здравствуйте!
Вот такая интересность.
Написал процедуру. Всё норма.
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. }

Не подскажите в чём проблема. Что за не буферизированный запрос и откуда? Вроде по умолчанию все буферизированные. Это что-то в процедурах???
2. Мелкий - 13 Октября, 2017 - 13:06:13 - перейти к сообщению
Используйте или mysql или хранимки. Не надо хранимки в mysql. Там граблей выше крыши.

Вероятно вы для create procedure не сделали fetchAll. Или возможно closeCursor надо вызвать. Нет mysql под рукой для экспериментов, а так не помню.
3. ytrewq123 - 13 Октября, 2017 - 13:17:48 - перейти к сообщению
Спасибо. Порою ещё и буду внимательно и аккуратно их применять.
4. ytrewq123 - 13 Октября, 2017 - 18:37:06 - перейти к сообщению
Может кому пригодится!
Почитать тута.
https://habrahabr[dot]ru/post/21326/
Ну и получилось надо после каждого вызова процедуры писать это.
while($rez->nextRowset()){}

 

Powered by ExBB FM 1.0 RC1