何时从MYSQL DB检索数据以获取Codeigniter

时间:2012-07-23 05:06:09

标签: mysql codeigniter

我在codeigniter应用程序中从MYSQL数据库传输大量数据。

想知道在流程的哪个阶段将从数据库中提取数据库。

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

我知道根据文档“query()函数返回一个数据库结果对象”但是这个对象是否包含实际记录,还是在我们调用result时从数据库中取出?

3 个答案:

答案 0 :(得分:2)

我想你在询问MySQL和PHP之间何时发生实际的数据传输。

query命令之后立即从服务器传输数据,然后在内部存储,以便稍后获取行。如果您考虑一下,它就非常有意义,因为您不希望每行的提取被阻止,而您的应用等待网络流量。

您可以通过在查询和提取之间设置一个休眠来运行tcpdump / wireshark以捕获网络流量来验证这一点(我只是这样做了)。

注意:codeigniter DB类只是内置mysql驱动程序的包装器,因此这不是特定于codeigniter的。

答案 1 :(得分:0)

根据任何数据库连接的实际实现,查询语句实际上只提取资源链接。

资源描述符将提供诸如返回/受影响的行数等详细信息。

但是,有一个内部指针由驱动程序维护,指向链接资源中的一个记录。

当通过result()访问记录时,将获取当前记录并在内部修改指针。

因此,实际获取数据时是$query->result()

答案 2 :(得分:-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

获取数据