Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > PDO: буферизация запросов.


Автор: Mal Hack 1.8.2006, 14:04
Есть несколько идущих подряд вот таких вызовов с обработкой результата:
Код

            $dbh = $this->kerPDO( "sqlGlobalGetUser" , array( ":user_nick" => $_COOKIE['session_user'] ) );

Метод:
Код

        protected function kerPDO( $query , $params )
        {
            if( ! method_exists( $this , $query ) )
            {    throw new PDOException( "Unknown query: " . $query );    }
            
            $dbh = $this->PDO->prepare( call_user_func( array( $this , $query ) ) );
            $dbh->execute( $params );

            return $dbh;
        }

Т.е. это в принципе выделенные в один метод вызов работы PDO функций. Первый параметр - метод, где хранится запрос, второй - масив параметров для bindParam.
Дык вот, если перед
Код

            $dbh = $this->kerPDO( "sqlGlobalGetUser" , array( ":user_nick" => $_COOKIE['session_user'] ) );

не делать 
Код

$dbh = null;

Будем получать ошибку:
Цитата

DataBase failed. Error: SQLSTATE[HY000]: General error: 2014 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.

Сразу скажу, что установка PDO::MYSQL_ATTR_USE_BUFFERED_QUERY отменяется, т.к. скрипт должен иметь возможность работать с разными базами. Хотя как крайней вариант - можно использовать.

В общем, сабж заключается в том, как убрать ошибку, убрав обнуление $dbh - PDOStatment.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)