哪个mysqli函数执行客户端服务器往返

时间:2014-08-23 07:32:54

标签: php mysql mysqli

我想了解为典型的mysqli查询进行了多少个客户端服务器调用?

Step(1) $result = mysqli_query($link, $query);

根据查询的类型,我们在此之后使用其他mysqli函数,如

mysqli_fetch_fields, mysqli_affected_rows, mysqli_insert_id, mysqli_fetch_row

等。然后我们关闭结果对象。

现在,是否在步骤(1)之后检索并存储在php内存中的所有数据? 或mysqli_fetch_fields,mysqli_insert_id等再调用mysql服务器?

询问原因:试图了解mysqli调用的工作原理。但对于像我这样的初学者来说无法在任何地方找到这样的解释。

3 个答案:

答案 0 :(得分:2)

PHP MySQLi API建立在MySQL C API之上。如果你对它有所了解会更好。

基本上,SELECT查询可以生成大型ResultSet,当您调用PHP的mysqli_store_result()(在C API中,mysql_store_result())时,此ResultSet将从服务器转移到客户端。

  • C API mysql_fetch_row()只返回一个指向MYSQL_RES *的指针(它已经在mysql_store_result()之后存储在PHP中。但是'mysqli_fetch_row()`需要一些记忆来制作PHP的数组。

  • mysqli_insert_id()(这是C API的last_insert_id())只返回MYSQL连接数据结构的插入ID,这意味着插入ID没有额外的内存。

如果您想了解MySQLi的工作原理,我建议您学习MySQL C API并查看PHP源代码。

答案 1 :(得分:1)

mysqli_query在服务器上运行查询并返回false是查询失败,true是查询成功但没有返回任何内容(例如UPDATE查询)或mysqli_result。 mysqli_result是一个扩展Traversable接口的类,所以是的,它在内存中。所有其他函数mysqli_fetch_fields,mysqli_affected_rows等只是该类中的方法,所以那些只是读取已经在内存中的内容。

有关详情,请参阅:php documentation

答案 2 :(得分:1)

documentation告诉您有关mysqli的所有信息。

mysqli_query执行查询并返回query object,此对象有一些方法,其中包括:

作为对象的所有方法,他们不执行sql请求,他们只是访问对象值,并根据方法返回不同的结果。