ステートメントの実行ステートメントは、 mysqli::query, mysqli::real_query, mysqli::multi_query を使って実行できます。 mysqli::query がもっともよく使われますが、 ステートメントの実行と、 バッファリングされた結果セットの取得を一回の呼び出しで組み合わせることもできます。 mysqli::query の呼び出しは、 mysqli::real_query の後に mysqli::store_result を呼び出すことと同じです。
例1 クエリを実行する
<?php バッファリングされた結果セット ステートメントを実行した後、 結果は一度に全部取得するか、 一行ずつ読み取ることのどちらかができます。 クライアント側で結果セットをバッファリングすることで、 サーバーは結果セットに関連付けられたリソースをできるだけ早く開放できます。 一般的な話ですが、 クライアントが結果セットを処理する速度は遅いです。 そのため、バッファリングされた結果セットを使うことを推奨します。 mysqli::query は、ステートメントの実行と結果セットのバッファリングを組み合わせます。 PHP アプリケーションは、 バッファリングされた結果セットを通して、結果を自由に操作できます。 そうすることで、結果セットがクライアント側のメモリに保持されるため、 高速です。 サーバー側をスケールさせるより、 クライアント側でスケールさせるほうが容易なことがある、 ということを頭に入れておいて下さい。
例2 バッファリングされた結果セットを操作する
<?php 上の例の出力は以下となります。 Reverse order... id = 3 id = 2 id = 1 Result set order... id = 1 id = 2 id = 3 結果セットをバッファリングしない場合 クライアント側のメモリが不足し、 かつサーバー側のリソースをできるだけ早く開放することで、 サーバーの負荷を下げる必要がない場合、 結果セットのバッファリングを無効にできます。 結果セットをバッファリングしない場合、 全ての行を読み取るまで、 結果を操作することはできません。
例3 結果セットをバッファリングせず、結果を操作する
<?php 結果セットの値のデータ型
mysqli::query,
mysqli::real_query,
mysqli::multi_query
関数は、準備されていないステートメントを実行するために使います。
MySQL のクライアントサーバープロトコルのレベルでは、
例4 テキストプロトコルは、文字列を返すのがデフォルト
<?php 上の例の出力は以下となります。 id = 1 (string) label = a (string)
mysqlnd ライブラリを使っている場合に、
例5 mysqlnd と接続オプションを設定することで、ネイティブのデータ型を扱う
<?php 上の例の出力は以下となります。 id = 1 (integer) label = a (string) 参照
|