不要让两只手让你困惑,这两者都是优点(它们应该在同一只手上)
一方面,这对于产生大型结果集的 SQL 查询节省了大量的内存。
另一方面,您可以立即开始处理结果集……
(PHP 4 >= 4.0.6, PHP 5)
mysql_unbuffered_query — 发送 SQL 查询到 MySQL,而不获取和缓冲结果行
此扩展在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中移除。取而代之,应使用 MySQLi 或 PDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南。此函数的替代方案包括
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 查询。
不要让两只手让你困惑,这两者都是优点(它们应该在同一只手上)
一方面,这对于产生大型结果集的 SQL 查询节省了大量的内存。
另一方面,您可以立即开始处理结果集……
使用非缓冲查询时,您**不必**读取结果集中的所有行,您可以随时选择退出并使用 mysql_free_result。想象一下查看 100 万行,而前 50 行就足够了?只需释放结果,您就可以继续执行。