我想了解一个典型的mysqli查询有多少客户端服务器调用?
Step(1) $result = mysqli_query($link, $query);
根据查询的类型,我们在此之后使用其他mysqli函数,如
mysqli_fetch_fields, mysqli_affected_rows, mysqli_insert_id, mysqli_fetch_row
等。然后关闭结果对象。
现在,是所有的数据检索和存储在php内存后的步骤(1)?或者mysqli_fetch_fields, mysqli_insert_id等使另一个调用mysql服务器?
问的原因:试图理解mysql调用是如何工作的。
PHP MySQLi
API是基于MySQL C API构建的。所以如果你对它有所了解就更好了。
基本上,SELECT
查询可以产生大的ResultSet和这个ResultSet从服务器端传输到客户端,当你调用PHP的mysqli_store_result()
(在C API, mysql_store_result()
)。
-
C API
mysql_fetch_row()
只是返回一个指向MYSQL_RES*的指针(它已经在PHP中存储在mysql_store_result()
之后)。但是'mysqli_fetch_row() '将需要一些内存来制作PHP的数组。 -
mysqli_insert_id()
(这是C API的last_insert_id()
)只是返回MYSQL
连接数据结构的插入id,这意味着没有额外的内存用于插入id。
如果你想知道MySQLi是如何工作的,我建议你学习MySQL C API并查看PHP源代码。
mysqli_query在服务器上运行查询并返回false表示查询失败,true表示查询成功但未返回任何内容(例如UPDATE查询),否则返回mysqli_result。mysqli_result是一个扩展可遍历接口的类,所以是的,它在内存中。所有其他函数mysqli_fetch_fields, mysqli_affected_rows等只是类中的方法,所以它们只是读取已经在内存中的内容。
php文档这个文档告诉你关于mysqli
你需要知道的一切。
mysqli_query
执行查询并返回一个查询对象,该对象有一些方法,其中有:
-
mysqli_fetch_fields
:返回一个对象数组,该数组表示结果集中的字段
-
mysqli_affected_rows
:返回受影响的行数最后插入、更新、替换或删除查询。
-
mysqli_insert_id
:返回上次查询中使用的自动生成的id
-
mysqli_fetch_row
:获取结果行作为枚举数组
作为对象的所有方法,它们不执行sql请求,它们只是访问对象的值并根据方法返回不同的结果。