PHP Conference Nagoya 2025

mysql_unbuffered_query

(PHP 4 >= 4.0.6, PHP 5)

mysql_unbuffered_query向 MySQL 发送 SQL 查询,无需获取和缓冲结果行

警告

本扩展自 PHP 5.5.0 起已废弃,并在自 PHP 7.0.0 开始被移除。应使用 MySQLiPDO_MySQL 扩展来替换之。参见 MySQL:选择 API 指南来获取更多信息。用以替代本函数的有:

说明

mysql_unbuffered_query(string $query, resource $link_identifier = NULL): resource

mysql_unbuffered_query() 将 SQL query 发送到 MySQL,而不像 mysql_query() 那样自动获取和缓冲结果行。对于生成大型结果集的 SQL 查询,这可以节省大量内存,并且可以在检索第一行后立即开始处理结果集,因为不必等到执行完整的 SQL 查询。要在打开多个数据库连接时使用 mysql_unbuffered_query(),必须指定可选参数 link_identifier 来标识要使用哪个连接。

参数

query

要执行的 SQL 查询。

查询中的数据应正确转义

link_identifier

MySQL 连接。如不指定连接标识,则使用由 mysql_connect() 最近打开的连接。如果没有找到该连接,会尝试不带参数调用 mysql_connect() 来创建。如没有找到连接或无法建立连接,则会生成 E_WARNING 级别的错误。

返回值

对于 SELECT、SHOW、DESCRIBE 或 EXPLAIN 语句,mysql_unbuffered_query() 在成功时返回 resource,错误时返回 false

对于其他类型的 SQL 语句,UPDATE、DELETE、DROP 等,mysql_unbuffered_query() 在成功时返回 true,在错误时返回 false

注释

注意:

mysql_unbuffered_query() 的好处是有代价的:在获取所有行之前,不能对 mysql_unbuffered_query() 返回的结果集使用 mysql_num_rows()mysql_data_seek()。还必须使用相同的 link_identifier 从无缓冲的 SQL 查询中获取所有结果行,然后才能将新的 SQL 查询发送到 MySQL。

参见

添加备注

用户贡献的备注 3 notes

up
3
frappyjohn at dos2linux dot org
21 years ago
Don't let the two hands confuse you, these are both advantages (they should really be on the same hand):

On the one hand, this saves a considerable amount of memory with SQL queries that produce large result sets.

On the other hand, you can start working on the result set immediately ...
up
3
crazyone at crazycoders dot net
16 years ago
You are NOT required to read all rows from the resultset when using unbuffered query, you may opt out at any time and use mysql_free_result. Imagine looking at 1 million row when the first 50 suffice? Just free the result and you are good to go again.
up
0
post at jfl dot dk
21 years ago
If using optimized MyISAM tables I guess there is a big advantage with this function as it is possible to do selects and inserts on the same time as long as no rows in the table gets updated.
To Top