【问题标题】:invalid MySQL argument in mysql_fetch_arraymysql_fetch_array 中的 MySQL 参数无效
【发布时间】:2014-04-06 20:12:43
【问题描述】:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /rideanddrive/_classes/__base.php on line 45

我的代码:

public static function SelectSpecific($obj, $data_base, $cond)
{
    self::$query = "select $obj from " . self::$baseprefix . "$data_base where $cond";
    $out = self::Execute();
    $array = mysql_fetch_array($out); // THIS LINE IS WARNING LINE
    return $array[$obj];
}

如果需要,执行函数:

private static function Execute() 
{
    $out = mysql_query(self::$query);
    return $out;
}

代码运行良好。我在本地主机上没有收到警告(运行 WAMP,可能已将其关闭?),它也适用于实时服务器,但是我收到上述警告,我该如何纠正它以使警告消失?

【问题讨论】:

    标签: php mysql database mysqli fetch


    【解决方案1】:

    在您的 SelectSpecific 函数上嵌入 if 检查以查看您的 execute 函数是否返回了正确的资源资源。如果没有,则回显您的 sql 然后在服务器上运行它单独,以便如果您可以找到错误,如果 sql 有任何错误,这里是带有 if 嵌入的更新函数

    public static function SelectSpecific($obj, $data_base, $cond)
        {
            self::$query = "select $obj from " . self::$baseprefix . "$data_base where $cond";
            $out = self::Execute();
            if($out){
              $array = mysql_fetch_array($out); // THIS LINE IS WARNING LINE
              return $array[$obj];
           }else {
             return false;
           }
        }
    

    【讨论】:

    • @Abbys:请注意,这会使错误消息不再出现,但是 - 当然 - 它不会修复 SQL 查询中的错误。
    • @Callidior - 感谢您的评论。但是,这是一个警告,而不是错误。查询本身工作正常,它收集我想要的数据并返回它就好了。还是我只是在这里遗漏了什么?
    • @Abbys:如果您按照上面的答案实现它,则不会返回任何数据,但在这种情况下是 false。所以,至少有一个错误的查询。您刚刚添加了一个显式检查,无论它是否成功。如果没有,您甚至不会调用产生警告的mysql_fetch_array;但您也不会以这种方式收集任何数据。
    【解决方案2】:

    此警告表明,由于某种原因,您的 SQL 查询存在(句法或语义)问题,因此 mysql_query 返回 FALSE 而不是 MySQL 结果资源。

    您可以使用mysql_error() 从 MySQL 中检索错误消息作为字符串进行调试。


    请注意,您使用的 mysql 扩展自 PHP 5.5 起已弃用,并将在未来的 PHP 版本中删除。考虑切换到mysqli

    【讨论】:

      【解决方案3】:

      由于错误,您的查询可能返回 FALSE

      对于 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回结果集的语句,mysql_query() 成功时返回资源,错误时返回 FALSE。

      Source

      var_dump()你的$out看看是不是FALSE

      更好的是,只需显示您的错误以进行调试:

      if (!$out) {
          $message  = 'Invalid query: ' . mysql_error() . "\n";
          $message .= 'Whole query: ' . $query;
          die($message);
      }
      

      顺便说一句,您不应再使用mysql_query() 和所有其他mysql_* 函数,因为它们已弃用。请改用mysqliPDO

      【讨论】:

        猜你喜欢
        • 2014-04-09
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多