PHP:警告:get_resource_type()期望参数1是资源,给定对象

时间:2016-09-26 01:54:16

标签: php mysql mysqli

我已查找此特定错误,但无法找到答案。我正在尝试将为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。有人能帮忙吗?

2 个答案:

答案 0 :(得分:2)

与旧的MySQL功能不同,MySQLi方法通常不会返回资源。它们通常返回一个对象或一些其他字符串/整数/布尔/ null类型。错误信息非常清楚。函数get_resource_type()期望一个资源作为参数,并且你给它一个对象。

请务必阅读PHP中的Types,以了解resource typesobject 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