1

MSSQLデータベースからいくつかのテーブルを取得し、そこから注文情報を取得するために実行しています。

私のコードは次のようになります。

    while($row = sqlsrv_fetch_array($orderResult))
    {
        ......code........
        ..................
        while($statusRow = sqlsrv_fetch_array($statusResult))
        {
            ....code....
        }
        ....code....
    }

今私の問題は、2番目のループが実行された後、それが二度と実行されないことです。そして、最初のループが実行されるたびに実行する必要があります。

その2番目のループをリセットして再度実行するためにできることはありますか?

前もって感謝します。ヘルプや正しい方向へのプッシュは非常に役立ちます。

4

4 に答える 4

2

sqlsrv_fetch_array()の他のパラメーターについて読む

あなたはリセットするためにこのようなことをすることができます

// reset, and get first row
$row = sqlsrv_fetch_row($result, SQLSRV_FETCH_BOTH, SQLSRV_SCROLL_FIRST);

// get second (and nth row) normally
$row = sqlsrv_fetch_row($result);

JOINまたは、クエリでを実行して単一の結果を返すことでメリットが得られると思います。このように手動で結果をマージするのは少しハックのようです。

于 2012-05-09T21:31:26.943 に答える
1

複数の結果セットを返すデータベースからストアドプロシージャを呼び出すときにも、同様の問題が発生しました。Macekの答えは私にはうまくいかなかったが、別の答えはうまくいった:

$resultSet = array();
$isNotLastResult = true;
$i = 0;

while (!is_null($isNotLastResult))
{
    $resultSet[$i] = array();

    while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC))
    {
        $resultSet[$i][] = $row;
    }

    $isNotLastResult = sqlsrv_next_result($result);
    $i++;
}

print_r($resultSet);

PS:下向き矢印を打ち消すために上向き矢印を付けました。あなたは私が答えを探すのにかなりの時間を費やした質問をしました。良い質問!

于 2014-05-19T18:44:25.463 に答える
1

ポインタをリセットするには、以下を使用します。

sqlsrv_fetch_array ($Res, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_ABSOLUTE, -1);

次に、前と同じコードを使用して、結果セットをループします。sql_fetch_arrayは、データを取得した後にポインタをインクリメントするように見えます。-1レコードを要求すると、何も取得されず、ポインタが最初のレコードである0に設定されます。

于 2015-07-02T00:55:41.433 に答える
0

2番目のループで2回目の実行の結果が得られましたか?おそらく、$statusResultが$rowに依存し、$ rowに最初のループのエントリしかない場合は、データベースにいくつかの疑似エントリを挿入する必要があります。

2番目のループは、次の「ビッグ」ループで自動的に更新されます。これにより、内側のブロック全体がビッグブロックの最後で破棄され、次のエントリで(完全に)再構築されます。

于 2012-05-09T21:25:54.863 に答える