mysql查询偶尔会返回任何内容

rob*_*lls 0 php mysql

我们在PHP/MySQL应用程序中使用了一个返回基本配置信息的函数,它包含一个简单的select查询,如下所示:

public function getConfigurationValue($field)
{
    $res = mysql_query("SELECT `cfg_value` FROM `ls_config` WHERE `cfg_name` = '".mysql_real_escape_string($field)."'");
    $cfg = htmlspecialchars(mysql_result($res,0));
    return $cfg;
}
Run Code Online (Sandbox Code Playgroud)

我们遇到的这个问题是偶尔看似随机,这个查询会在mysql_result上抛出一个mysql错误,说"提供的参数不是一个有效的mysql结果资源".在我们的调试中,我们已经确定这不是因为$ field没有被传递.基本上,由于某种原因,我们无法确定完全有效的查询失败并且不返回导致空结果集和后续错误的结果.如果错误是由于mysql连接失败导致脚本在此之前就已经死了.此外,在某些页面加载时,此函数可能会调用50-100次,但在每次加载时只会失败一次.

如果您需要任何其他信息,请告知我们.

谢谢.

And*_*w Y 5

搜索php"提供的参数不是一个有效的mysql结果资源"显示,要获得实际错误,你需要调用mysql_error,而你得到的错误是因为查询结果为FALSE - 这个值不是一个有效的mysql结果资源.

即简而言之,你有类似的东西:

$res = FALSE; # should contain the mysql result but does not, due to error.
$cfg = htmlspecialchars(mysql_result($res,0)); # the attempt to call mysql_result on invalid argument errors out.
Run Code Online (Sandbox Code Playgroud)

所以你想要使用这样的东西:

$query = "SELECT * FROM cats WHERE id=$id";
$qr1 = mysql_query ($query)
      or die ("Query failed: " . mysql_error() . " Actual query: " . $query);
Run Code Online (Sandbox Code Playgroud)

您可能希望尝试一下,看看底层错误消息的内容.


鉴于错误是"MySQL服务器已经消失",可能有很多原因 - 本文将是一个很好的开始调查.搜索还会显示一些与PHP相关的特定于堆栈的错误,因此看起来您可能需要更密切地调试它.

也许尝试在另一个盒子上复制设置,然后开始尝试版本/设置,看看是否有任何已报告的场景与您的案例相匹配.不幸的是,似乎没有一个简单的答案.