-4

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

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

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

这是我的 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);
}
?>

请帮助修复它 - 谢谢。

4

4 回答 4

0

mysql_fetch_array 期望来自 mysql_query 调用的结果对象

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

于 2013-03-07T19:28:05.123 回答
0

您必须首先实际执行查询。试着抬头mysql_query

$result = mysql_query("SELECT * FROM users WHERE user_id = '$user'")
$ar = mysql_fetch_array($result);
于 2013-03-07T19:28:28.253 回答
0

使用 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函数。

于 2013-03-07T19:29:18.697 回答
0

在您当前的代码中,您从未真正对数据库运行查询。您必须先使用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 注入漏洞,因为您根本没有转义输入。

于 2013-03-07T19:36:41.200 回答