web-dev-qa-db-ja.com

mysqli_queryとmysqli_real_queryの違い

違いは何ですか mysqli::queryおよびmysqli::real_query

OR

違いは何ですか mysqli_queryおよびmysqli_real_query

28
itsazzad

mysqli_query ()のドキュメントを見てください:

機能的には、この関数を使用することは、mysqli_real_query()を呼び出してからmysqli_use_result()またはmysqli_store_result()を呼び出すことと同じです。

私が理解していることから、real_queryは実際にクエリを実行し、use/store_resultはクエリの結果セットを取得するプロセスを開始します。 query()は両方を実行します。

18
Bgi

mysqli::queryがある場合は、結果を返します。

mysql::real_query成功した場合はtrueを返し、そうでない場合はfalseを返します

あなたはこれをphpドキュメントで見ることができたでしょう:

17
Thomas

少し遅れますが、私にとって最大の進歩は、これらの関数がデフォルト設定で呼び出されたときのRAMの使用法です。mysqli_real_query()を使用すると、結果全体をRAMにコピーしません。これはデフォルトでmysqli_query()が実行します(ただし、$resultmodeパラメーターを使用して変更できます)。

1
Marco

実際には、他の回答には見られない別の違いがあります。 CALLステートメントにはmysqli_real_query()を使用する必要があります。

ストアドプロシージャを呼び出す場合は、複数の結果が返される可能性があります。 mysqli_query()は最初の結果をフェッチしますが、フェッチする必要のある結果がさらに多くなる可能性があり、エラーが発生します。これらの結果セットをフェッチするには、_mysqli_real_query_(またはmysqli_multi_query())を使用する必要があります。

残念ながら、その説明は PHP docs のストアドプロシージャセクションにあるため、到達するのは困難です。

念のため、_mysqli::real_query_を使用して複数の結果セットを返すことを想定したプロシージャを呼び出すコード例を紹介します。

_$query="CALL storedProcedure()";
if($conn->real_query($query)){              
    do{
        if($result=$conn->store_result()) {
            while($row=$result->fetch_assoc()) {
                print_r($row);
            }
            $result->free();
        }
    }while($conn->more_results() && $conn->next_result());          
}
_
1