0

SQL ステートメントからのすべての結果を別の配列に保存したいと考えています。私は試した:

        $sql = "SELECT * FROM `link_server` WHERE `in_use` = false;";
        $sql .= "SELECT * FROM `link_queue` WHERE `active` = false;";

        if ($db->multi_query($sql))
        {
            do
            {
                // Erstes Abfrageergebnis ausgeben
                if ($result = $db->store_result())
                {
                    // Abfrageergebnis ausgeben
                    while ($server_fetch = $result->fetch_array())
                    {
                        $server[] = $server_fetch;
                    }

                    $result->close();

                }
                // Trenner fuer Zweites Abfrageergebnis
                if ($db->more_results())
                {
                    echo "<hr />test";
                    $queue[] = $server_fetch;
                }
            } while ($db->next_result());
        echo "Servers:";
        print_r($server);
        echo "Queue:";
        print_r($queue);
        }           

最初のステートメントの結果を配列に保存し$server、2 番目のステートメントを配列に保存する必要があります$queue

上記の例では、(両方のステートメントからの) 完全な戻り値が最初の配列 ( $server) に格納されます。2 番目の配列は空です。

どうすればそれを解決できますか?

ご協力いただきありがとうございます!

4

1 に答える 1

1

$db->more_results()次の結果セットを取得するためではなく、クエリの結果の最後に達したことを示すフラグを立てる方法です。これを使用して、たとえばフラグを設定することにより、ループに次の配列のロードを開始するように指示できます。

if ($result = $mysqli->store_result()) {
    while ($server_fetch = $result->fetch_row()) {
        if (!$second) {
            $server[] = $server_fetch;
        } else {
            $queue[] = $server_fetch;
        }
    }
    $result->close();
}
/* next set of results */
if ($mysqli->more_results()) {
    $second = true;
}

または、次のように可変変数を使用することもできます。

/* set up variables  */
$server = array();
$queue = array();
$active = 'server';

/* execute multi query */
if ($mysqli->multi_query($query)) {
    do {
        /* store result set */
        if ($result = $mysqli->store_result()) {
            while ($server_fetch = $result->fetch_row()) {
                ${$active}[] = $server_fetch;
            }
            $result->close();
        }
        /* next set of results */
        if ($mysqli->more_results()) {
            $active = 'queue';
        }
    } while ($mysqli->next_result());
} 

私はコメンターに同意する必要がありますが、これにより多くの労力とコードの複雑さが他の単純な要求のペアに追加されます。

于 2012-10-23T03:00:03.460 に答える