2

私の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();
    }
?>

その後、必要に応じて自分のページですべての呼び出しを行います。ただし、特に 1 つのページで、最初に 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 をオフにする可能性があり、すべての DB に基づいて再構築したくないからです (言うまでもなく、含めたときは機能しませんでした)。

なぜこれが起こっているのでしょうか?すべての DB 呼び出しの前に connector.php ファイルを「含める」ことができますが、それは繰り返しのようで、すべてのステートメントを $db->NULL にする必要があります。

注: これは、ストアド プロシージャへの呼び出しを含むページにのみ影響するようです。何か案は?

注: これは、Apache 2.2.14、PHP 5.3.1 を実行する XAMPP 1.7.3 を搭載した Windows マシンで実行されています。

4

2 に答える 2

1

これは明らかに、PHP のバグと、Windows マシンでのストアド プロシージャのサポートの欠如が原因です。

以下を試してください: http://bugs.php.net/bug.php?id=39858

最後のコメント: 1221253320を見ると、修正されたようです。PHP を最新バージョンに更新してみてください。5.3

私のアドバイス: xampp などの事前にパッケージ化された「サーバー」キットを使用している場合は、それをすべて破棄し、Storage Management の Storage Extender を使用してハード ドライブの 2GB を分割し、MySql、PHP、Apache を個別にインストールしてから構成する必要があります。

PHP の最新のスナップショットと最新の MySql ディストリビューションを使用し、アプリケーションとデータベースを新しいインストールに移行し、コンピューターを起動すると、正常に動作するはずです。

MySql Client Libs にもダウンする可能性があると思います。それらをアップグレードします

いくつかの関連リンクに出くわしました:

于 2011-02-15T22:31:11.487 に答える
0

PDO Unbuffered クエリ & Stored Proc.

PDO バッファリングされていないクエリ

于 2011-02-15T22:42:31.083 に答える