0

codeigniterアプリケーション内のMYSQLデータベースから大量のデータを送信しています。

プロセスのどの時点でデータベースがデータベースから抽出されるのか知りたい。

1) $query = $this->db->query("Select * from table");
2) $query->num_rows()
3) $query->result();

ドキュメントによると、「query()関数はデータベースの結果オブジェクトを返す」ことを知っていますが、このオブジェクトには実際のレコードが含まれていますか、それともresultを呼び出すときにデータベースからフェッチされますか?

4

3 に答える 3

2

MySQLとPHPの間で実際のデータ転送がいつ行われるかについて質問されていると思います。

データはコマンドの直後にサーバーから転送されてからquery内部に保存されるため、後で行をフェッチできます。あなたがそれについて考えるならば、あなたは各行のフェッチをブロックしたくないので、それは完全に理にかなっています、そしてあなたのアプリはネットワークトラフィックを待ちます。

これを確認するには、クエリとフェッチの間にスリープを設定し、tcpdump/wiresharkを実行してネットワークトラフィックをキャプチャします。

注:codeigniter DBクラスは、組み込みのmysqlドライバーの単なるラッパーであるため、codeigniter固有ではありません。

于 2012-07-23T07:48:02.363 に答える
0

データベース接続の実際の実装に従って、クエリステートメントは実際にはリソースリンクのみをフェッチします。

リソース記述子は、返された/影響を受けた行の数などの詳細を提供します。

ただし、リンクされたリソース内のレコードの1つを指すドライバーによって維持される内部ポインターがあります。

result()を介してレコードにアクセスすると、現在のレコードがフェッチされ、ポインターが内部で変更されます。

つまり、$query->result()データが実際にフェッチされるのはそのときです。

于 2012-07-23T07:26:34.230 に答える
-1
 $query = $this->db->query("Select * from table"); 

これにより、リソースIDが得られ、dbからのすべてのデータが必要な場合は、次のように記述します:-

$query = "SELECT * FROM table";

$result = $this->db->($query)->result_array();

そして、あなたがあなたの結果を見たいとき、あなたはこのようにすることができます-

print_r($result);

結論としてresult_array()、dbから実際にデータをフェッチしたのは

于 2012-07-23T07:35:32.277 に答える