mysqli::store_result

mysqli_store_result

直近のクエリから結果セットを転送する

説明

オブジェクト指向型

public mysqli_resultfalse mysqli::store_result(int $mode = 0)

手続き型

mysqli_resultfalse mysqli_store_result(mysqli $mysql, int $mode = 0)

mysqli_data_seek で使用される、 mysql で表されたデータベース接続の直近のクエリ から結果セットを転送します。

パラメータ

link

手続き型のみ: mysqli_connect あるいは mysqli_init が返す mysqliオブジェクト。

mode

指定したいオプション。 PHP 8.1 以降では、このパラメータを指定しても意味はありません。 以下のいずれかの値を指定します。

有効なオプション
名前 説明
MYSQLI_STORE_RESULT_COPY_DATA 結果を、内部の mysqlnd バッファーから PHP の変数にコピーします。 デフォルトでは、mysqlnd は参照を利用しており、メモリ内の結果をコピーしたり複製したりしないようにしています。 ある種の結果セット (短めの行を大量に保持する結果セットなど) の場合は、 コピーしたほうが、全体的なメモリ使用量を抑えることができます。 結果を保持する PHP の変数のほうが、解放されるのが早いからです。 これは mysqlnd でのみ利用可能です。

戻り値

バッファに格納した結果オブジェクトを返します。エラー時には false を返します。

注意:

mysqli_store_result は、クエリが結果セットを 返さなかった場合(例えば、クエリが INSERT 文であった場合)に false を返します。また、結果セットの読み込みに失敗した場合にも false を返します。エラーが発生したかどうかを調べるには、 mysqli_error が空文字列以外を返す・ mysqli_errno がゼロ以外の値を返す・あるいは mysqli_field_count がゼロ以外の値を返す のいずれかを確認します。それ以外にこの関数が false を返す理由としては mysqli_query のコールに成功して返された 結果セットが大きすぎる(メモリに割り当てられない)場合がありえます。 もし mysqli_field_count がゼロ以外の値を 返した場合、文は空でない結果セットを生成しています。

エラー / 例外

mysqli のエラー報告 (MYSQLI_REPORT_ERROR) が有効になっており、かつ要求された操作が失敗した場合は、警告が発生します。さらに、エラー報告のモードが MYSQLI_REPORT_STRICT に設定されていた場合は、mysqli_sql_exception が代わりにスローされます。

変更履歴

バージョン 説明
8.4.0 mode パラメータの指定は非推奨となりました。 PHP 8.1 以降では、このパラメータを指定しても意味はありません。

mysqli_multi_query を参照ください。

注意

注意:

クエリ結果が使用するメモリを mysqli_free_result 関数で開放するのは、どんな場合でも大切です。しかし、大きい結果セットを mysqli_store_result で転送した際は、特にこれが 重要となります。

参考

  • mysqli_real_query
  • mysqli_use_result