我在codeigniter应用程序中从MYSQL数据库传输大量数据。
想知道在流程的哪个阶段将从数据库中提取数据库。
1) $query = $this->db->query("Select * from table");
2) $query->num_rows()
3) $query->result();
我知道根据文档“query()函数返回一个数据库结果对象”但是这个对象是否包含实际记录,还是在我们调用result时从数据库中取出?
答案 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