我在 codeigniter 应用程序中从 MYSQL 数据库传输大量数据。
想知道从数据库中提取数据库的过程中的哪个时间点。
1) $query = $this->db->query("Select * from table");
2) $query->num_rows()
3) $query->result();
我知道根据文档“查询()函数返回一个数据库结果对象”但是这个对象是否包含实际记录或者当我们调用结果时它是从数据库中获取的?
我在 codeigniter 应用程序中从 MYSQL 数据库传输大量数据。
想知道从数据库中提取数据库的过程中的哪个时间点。
1) $query = $this->db->query("Select * from table");
2) $query->num_rows()
3) $query->result();
我知道根据文档“查询()函数返回一个数据库结果对象”但是这个对象是否包含实际记录或者当我们调用结果时它是从数据库中获取的?
我想您是在询问 MySQL 和 PHP 之间何时发生实际数据传输。
数据在命令后立即query
从服务器传输,然后存储在内部,因此您可以稍后获取行。如果您考虑一下,这是非常有意义的,因为您不希望每行的获取都被阻塞并且您的应用程序等待网络流量。
您可以通过在查询和获取之间设置睡眠并运行 tcpdump/wireshark 来捕获网络流量来验证这一点(我刚刚做到了)。
注意:codeigniter DB 类只是内置 mysql 驱动程序的包装,所以这不是 codeigniter 特定的。
根据任何数据库连接的实际实现,查询语句实际上只获取资源链接。
资源描述符将提供详细信息,例如返回/受影响的行数。
但是,驱动程序维护了一个内部指针,该指针指向链接资源中的一条记录。
当通过 result() 访问记录时,会获取当前记录并在内部修改指针。
因此,它$query->result()
是实际获取数据的时间。
$query = $this->db->query("Select * from table");
这将为您提供资源 ID,如果您想要来自 db 的所有数据,那么您可以编写:-
$query = "SELECT * FROM table";
$result = $this->db->($query)->result_array();
当你想查看你的结果时,你可以这样做 -
print_r($result);
所以结论是result_array()
真正从数据库中获取数据的