我已查找此特定错误,但无法找到答案。我正在尝试将为mysql编写的脚本修改为mysqli并且已成功解决此错误:
警告:get_resource_type()期望参数1是资源,对象给定(等)
以下是代码:
function free_result($queryid=-1)
{
if($queryid != -1)
{
$this->queryid = $queryid;
}
if((get_resource_type($this->queryid)==='mysql result') && is_resource($this->queryid))
return @mysql_free_result($this->queryid);
else
{
return false;
}
}
我不能为我的生活弄清楚如何更改它以将其更新为mysqli。有人能帮忙吗?
答案 0 :(得分:2)
与旧的MySQL功能不同,MySQLi方法通常不会返回资源。它们通常返回一个对象或一些其他字符串/整数/布尔/ null类型。错误信息非常清楚。函数get_resource_type()
期望一个资源作为参数,并且你给它一个对象。
请务必阅读PHP中的Types,以了解resource types与object types之间的差异。
我的猜测是,您希望$this->queryid
成为MySQLi_Result
个对象,而这正是您尝试检查的对象。因此,而不是get_resource_type()
使用instanceof
运算符来检查对象的类型。
function free_result($queryid = -1) {
if($queryid != -1) {
$this->queryid = $queryid;
}
if($this->queryid instanceof MySQLi_Result)
return mysqli_free_result($this->queryid);
} else {
return false;
}
}
或者,您只需键入提示函数的原型,只接受MySQLi_Result
类型的对象,以简化代码并使其更易于测试。
function free_result(MySQLi_Result $queryid = null) {
if($queryid) {
$this->queryid = $queryid;
}
if($this->queryid instanceof MySQLi_Result) {
return mysqli_free_result($this->queryid);
} else {
return false;
}
}
另外,请停止使用错误静音运算符@
。没有任何好处可以来。
请确保您正在调用mysqli_free_result()
而不是旧的mysql_free_result()
功能,如评论中所述。
答案 1 :(得分:1)
您需要了解MySQli返回的是对象而不是资源。所以你应该测试那个
WWW::Mechanize::Firefox