gpt4 book ai didi

php - mysql_fetch_row 会遇到连接错误吗?

转载 作者:行者123 更新时间:2023-11-29 04:48:15 26 4
gpt4 key购买 nike

mysql_fetch_row当有结果时返回一个数组,当没有更多行时返回 false

但是,当运行命令时出现与连接相关的错误时,预期的行为是什么?

或者更确切地说,我应该问...mysql_fetch_row 函数是否需要数据库连接?

在我的盒子上,我实际上可以关闭连接 ( mysql_close ) 并且仍然可以完美地获取行。但是我找不到任何文档说明这种行为是常态,或者甚至是预期的。

最佳答案

有两种“查询”功能:

现在,如果您使用 mysql_query,完整的结果集将存储在客户端上。因此,一旦 mysql_query 返回,就不需要服务器通信。您可以获得结果集的大小并使用mysql_seek。内部函数 mysql_store_result被使用,如果服务器在客户端获取结果时死机,您的 mysql_query 调用将失败。但是,如果结果集完全存储在客户端上,则 mysql_fetch_row 不会在您获取它们时服务器挂掉时失败。

如果您使用 mysql_unbuffered_query,您需要有一个有效的链接,因为结果集没有存储在客户端上——而是在您调用 mysql_fetch_row 时获取每一行>。因此,如果链接“终止”,则对 mysql_fetch_row 的下一次调用将失败。 C 函数 mysql_use_result在“无缓冲”调用中使用。

我创建了一个 simple PHP-script测试这个(太大而无法粘贴)。

引用mysql_fetch_row-function of the mysql C-Library的手册:

Retrieves the next row of a result set. When used after mysql_store_result(), mysql_fetch_row() returns NULL when there are no more rows to retrieve. When used after mysql_use_result(), mysql_fetch_row() returns NULL when there are no more rows to retrieve or if an error occurred.

这是隐含的:

  • 如果使用 mysql_store_result(缓冲的普通查询),则 mysql_fetch_row 仅在没有更多行要获取时返回 null
  • 如果使用 mysql_use_result(无缓冲查询),则 mysql_fetch_row 在没有更多行时返回 null 如果存在错误提取服务器的下一行。

没有提及任何特定于平台的行为,因此我认为这适用于所有平台。当然,我们必须深入研究这些函数的源代码才能确定。

关于错误情况下的行为:在 PHP 端 mysql_fetch_result 如果未缓冲的结果集的提取失败(或者如果没有更多的行)将返回 false。 mysql_* 函数不会抛出异常,但如果出现故障,则会发出警告 - 在我的脚本中它显示 Warning: mysql_fetch_row(): 8 is not a valid MySQL result ...中的资源。所以如果你想检查一个错误,你必须做类似的事情:

while($row = mysql_fetch_row($result)) {
// do stuff
}

if(mysql_errno($dbhandle) !== 0) {
echo "there was an error: ", mysql_error($dbhandle), PHP_EOL;
}

如果您想编写真正具有防御性的代码,则无论您使用的是哪种查询函数,都必须这样做。

顺便说一下:如果用 mysql_close 关闭 mysql 连接,此防御代码将不起作用,因为句柄现在已关闭并且 mysql_errno 返回 false(加上发出警告)。

关于php - mysql_fetch_row 会遇到连接错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15343688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com