PHP Conference Japan 2024

mysql_unbuffered_query

(PHP 4 >= 4.0.6, PHP 5)

mysql_unbuffered_query发送 SQL 查询到 MySQL,而不获取和缓冲结果行

警告

此扩展在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中移除。取而代之,应使用 MySQLiPDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南。此函数的替代方案包括

描述

mysql_unbuffered_query(字符串 $query, 资源 $link_identifier = NULL): 资源

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() 在成功时返回一个 资源,在出错时返回 false

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

注释

注意:

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

参见

添加注释

用户贡献的注释 3 条注释

3
frappyjohn at dos2linux dot org
21 年前
不要让两只手让你困惑,这两者都是优点(它们应该在同一只手上)

一方面,这对于产生大型结果集的 SQL 查询节省了大量的内存。

另一方面,您可以立即开始处理结果集……
3
crazyone at crazycoders dot net
16 年前
使用非缓冲查询时,您**不必**读取结果集中的所有行,您可以随时选择退出并使用 mysql_free_result。想象一下查看 100 万行,而前 50 行就足够了?只需释放结果,您就可以继续执行。
0
post at jfl dot dk
21 年前
如果使用优化的 MyISAM 表,我认为此函数具有很大的优势,因为只要表中的行没有被更新,就可以同时进行选择和插入操作。
To Top