我想了解为典型的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调用的工作原理。但对于像我这样的初学者来说无法在任何地方找到这样的解释。
答案 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,此对象有一些方法,其中包括:
返回表示结果集
中字段的对象数组
返回受上一次INSERT,UPDATE,REPLACE或DELETE查询影响的行数。
返回上次查询中使用的自动生成的ID
获取结果行作为枚举数组
作为对象的所有方法,他们不执行sql请求,他们只是访问对象值,并根据方法返回不同的结果。