我们在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;
}
我们遇到的问题是,偶尔看似随机,这个查询会在mysql_result上抛出一个mysql错误,说“提供的参数不是一个有效的mysql结果资源”。在我们的调试中,我们已经确定这不是因为$ field没有被传递。基本上,由于某种原因,我们无法确定完全有效的查询失败并且不返回导致空结果集和后续错误的结果。如果错误是由于mysql连接失败导致脚本在此之前就已经死了。此外,在某些页面加载时,此函数可能会调用50-100次,但在每次加载时只会失败一次。
如果您需要任何其他信息,请告知我们。
感谢。
答案 0 :(得分: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.
所以你想要使用这样的东西:
$query = "SELECT * FROM cats WHERE id=$id";
$qr1 = mysql_query ($query)
or die ("Query failed: " . mysql_error() . " Actual query: " . $query);
您可能希望尝试一下,看看底层错误消息的内容。
鉴于错误是“MySQL服务器已经消失”,可能有多种原因 - this article将是一个良好的调查开端。 Searching还提出了一些与php相关的特定于堆栈的错误,所以看起来你可能需要仔细调试它。
也许尝试在另一个框上复制设置,然后开始尝试版本/设置,看看是否有任何已报告的方案与您的情况相符。不幸的是,似乎没有一个简单的答案。