2013-03-07 214 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注入漏洞,因爲根本沒有轉義輸入。