Разъём PDO нельзя использовать на странице с несколькими экземплярами

Вверху моей php-страницы я включаю скрипт подключения, который называется:

include("connector.php")

Connector.php

<?php

    try
    {
        $db = new PDO('mysql:host=localhost;dbname=DB', 'USER', 'PW');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    catch (PDOException $e)
    {
        echo $e->getMessage();
    }
?>

Затем я делаю все последующие звонки на своих страницах по мере необходимости. В частности, на одной странице я первоначально делаю вызов хранимой процедуры MySQL:

$stmt = $db->prepare("CALL Procedure(:id)");
$stmt->bindParam(':id', $id);
$stmt->execute();

while($row=$stmt->fetch()) {
    echo "<tr>
        <td>".$row['ID']."</td>
        <td>".$row['NAME']."</td>
        </tr>";
}

Нет проблем с моей хранимой процедурой, но когда я пытаюсь выполнить какие-либо последующие вызовы, на странице появляется обычная ошибка небуферизованных запросов PDO Mysql:

Неустранимая ошибка: необработанное исключение "PDOException" с сообщением "SQLSTATE[HY000]: общая ошибка: 2014 г. Невозможно выполнить запросы, когда другие небуферизованные запросы активны. Рассмотрите возможность использования PDOStatement::fetchAll(). В качестве альтернативы, если ваш код работает только с mysql, вы можете включить буферизацию запросов, установив атрибут PDO::MYSQL_ATTR_USE_BUFFERED_QUERY.' в C:\page.php:261 Трассировка стека: #0 C:\page.php(261): PDOStatement->execute(Array) #1 {main}, брошенный в C: \ page.php в строке 261

Да, я пытался использовать FetchAll, и НЕТ, я не хочу использовать атрибут PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, так как мы можем отключить MySQL в более поздний момент времени, и я не хочу перестраивать на основе каждой БД (не говоря уже о том, чтобы даже когда я включил это не сработало).

Есть идеи, почему это может происходить? Я мог бы "включить" файл connector.php перед каждым вызовом БД, но это кажется повторяющимся, и мне пришлось бы $db->NULL для каждого оператора.

Примечание: похоже, это влияет только на страницы с обращениями к хранимым процедурам. Есть идеи?

Примечание: это выполняется на компьютере Windows с XAMPP 1.7.3 под управлением Apache 2.2.14, PHP 5.3.1

2 ответа

Очевидно, это вызвано ошибкой в ​​PHP и отсутствием поддержки хранимых процедур на компьютерах с Windows.

Пожалуйста, попробуйте следующее: http://bugs.php.net/bug.php?id=39858

Глядя на самый последний комментарий: 1221253320 кажется, что это было исправлено, вы можете попробовать обновить ваш PHP до последней версии. 5,3

Мой совет: если вы используете предварительно упакованный "серверный" набор, такой как xampp, вам следует собрать все это вместе, разделить 2 ГБ жесткого диска, используя Storage Extender в разделе "Управление хранилищем", отдельно установить MySql,PHP,Apache, а затем настроить их.

используйте этот последний снимок PHP и последний дистрибутив MySql, перенесите приложение и базу данных на новую установку, пните свой компьютер, и он должен нормально работать.

Могу поспорить, что это может быть и до MySql Client Libs, обновить их

Некоторые связанные ссылки, с которыми я сталкиваюсь:

PDO Небуферизованные запросы и сохраненные процессы.

PDO Небуферизованные запросы

Другие вопросы по тегам