2013-03-07 126 views
-4

我今天开始使用PHP和MySQL作为我的一个小型项目。 我有我的分贝,我做了一个PHP代码,以获得user_id和得分从表中,但我得到这个错误,我不知道如何得到他们的骑:你可以看到最后,即时获取我的请求响应。mysql_fetch_array()警告和mysql_num_rows()警告

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

警告:mysql_num_rows()预计参数1是资源,空 在 /home/marathon/domains/marathon-il.com/public_html/Apps/million/view_all.php 给定上线18 { “成功” :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); 
} 
?> 

请帮忙解决这个问题 - 谢谢。

+1

您没有使用http://php.net/mysql_error来捕获错误,因此难怪代码会随意断开。也要注意SQL注入http://php.net/manual/en/security.database.sql-injection.php – 2013-03-07 19:26:31

+0

你是PHP的新手,你应该学习使用mysqli或PDO,而不是使用mysql_ *函数,这些函数已被弃用。具体来说,我会建议还学习如何使用预准备语句来防止当前存在的SQL注入漏洞。 – 2013-03-07 19:29:16

+0

[google上有二分之一百万的投诉](https://www.google.com/search?sugexp=chrome,mod=4&sourceid=chrome&client=ubuntu&channel=cs&ie=UTF-8&q=Warning%3A+mysql_fetch_array()+预计+参数+ 1 +至+是+资源%2C +串+给出) – 2013-03-07 19:31:47

回答

0

,你必须先实际执行查询。尝试查找mysql_query

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

mysql_fetch_array预计从呼叫结果对象从的mysql_query

它应该像 $result = mysql_query("SELECT......."); $var = mysql_fetch_array($result);

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

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 

你绝对应该看看使用,而不是MySQL的函数库MySQLi或PDO。我只回答了一个答案,告诉你逻辑步骤是什么(这与mysqli或PDO类似),以及如何实际处理来自每个数据库函数的所有可能结果。确保你在那里有错误处理。当您试图解决您的查询,数据库连接等问题时,它可以为您节省大量时间。

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