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)
パラメータ
-
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 が代わりにスローされます。
例
mysqli_multi_query を参照ください。
注意
注意:
クエリ結果が使用するメモリを mysqli_free_result
関数で開放するのは、どんな場合でも大切です。しかし、大きい結果セットを
mysqli_store_result で転送した際は、特にこれが
重要となります。
参考
- mysqli_real_query
- mysqli_use_result