【问题标题】:mysql_fetch_array() warning and mysql_num_rows() warning [duplicate]mysql_fetch_array() 警告和 mysql_num_rows() 警告[重复]
【发布时间】:2013-02-23 04:04:40
【问题描述】:

对于我的一个迷你项目,我是 PHP 和 MySQL 的新手(从今天开始)。 我有我的数据库,我制作了一个 PHP 代码来从表中获取 user_id 和分数,但我得到了这个错误,我不知道如何解决它们:你最终可以看到我得到了我请求的响应。

警告:mysql_fetch_array() 期望参数 1 是资源, 给出的字符串 /home/marathon/domains/marathon-il.com/public_html/Apps/million/view_all.php 在第 15 行

警告:mysql_num_rows() 期望参数 1 是资源,null 给出 /home/marathon/domains/marathon-il.com/public_html/Apps/million/view_all.php 第 18 行 {"success":0,"message":"new_user"}

这是我的 getinfo.php:

<?php

$response = array();

require_once __DIR__ . '/db_connect.php';

$db = new DB_CONNECT();

$user = $_POST['userid'];

$result = mysql_fetch_array("SELECT * FROM users WHERE user_id = '$user'");

// check for empty result
if (mysql_num_rows($result) > 0){

        $userinfo = array();
        $userinfo["user_score"] = $result["score"];
        $userinfo["user_date"] = $result["date"];

        $response['info']= $userinfo;
    $response["success"] = 1;

    echo json_encode($response);;

} 
else {
    $response["success"] = 0;
    $response["message"] = "new_user";
    echo json_encode($response);
}
?>

请帮助修复它 - 谢谢。

【问题讨论】:

标签: php mysql mysql-num-rows


【解决方案1】:

您必须首先实际执行查询。尝试查找mysql_query

$result = mysql_query("SELECT * FROM users WHERE user_id = '$user'")
$ar = mysql_fetch_array($result);

【讨论】:

    【解决方案2】:

    mysql_fetch_array 需要来自 mysql_query 调用的结果对象

    应该是这样的 $result = mysql_query("SELECT......."); $var = mysql_fetch_array($result);

    【讨论】:

      【解决方案3】:

      mysql_fetch_array 函数的正确使用方法如下。请注意,我们首先执行创建资源对象的查询。然后我们将该对象传递给 mysql_fetch_array 和 mysql_num_rows 函数:

      $result = mysql_query("SELECT * FROM users WHERE user_id = '$user'") or die(mysql_error());
      while($row=mysql_fetch_array($result)){
          $userinfo = array();
          $userinfo["user_score"] = $row["score"];
          ....
      }
      

      同样你应该使用 mysql_num_rows 如下(假设 $result 对象已经创建):

      $numRows = mysql_num_rows($result);
      

      请注意,您不应使用 mysql_* 函数,而应学习 mysqli 函数。

      【讨论】:

        【解决方案4】:

        在您当前的代码中,您从未真正对数据库运行查询。您必须先使用mysql_query(),然后才能使用mysql_num_rows()mysql_fetch_array()。因为您没有将结果集资源传递给这些函数,所以会出现错误。

        试试这个:

        $sql_result = mysql_query("SELECT * FROM users WHERE user_id = '$user'");
        
        if (false === $sql_result) {
            // query failed for some reason
            throw new Exception('Query failed with error: ' . mysql_error());
        }
        
        $rows = mysql_num_rows($sql_result);
        $result = array();
        
        if ($rows > 1) {
            // too many rows were returned
            throw new Exception('Too many rows returned');
        } else if (mysql_num_rows($result) === 1){
            $result = mysql_fetch_array($result);
            // continue  with rest of your code 
        

        您绝对应该考虑使用 mysqli 或 PDO 而不是 mysql 函数。我只回复了一个答案,向您展示了逻辑步骤是什么(对于 mysqli 或 PDO 类似)以及您应该如何实际处理每个数据库函数的所有可能结果。确保那里有错误处理。在尝试解决查询、数据库连接等问题时,它将为您节省大量时间。

        您还需要查看您的 SQL 注入漏洞,因为您根本没有转义输入。

        【讨论】:

          猜你喜欢
          • 2014-11-22
          • 1970-01-01
          • 2011-08-28
          • 2012-10-25
          • 1970-01-01
          • 1970-01-01
          • 2014-04-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多