2011-12-15 154 views
3

可能重複:
PHP Error: mysql_fetch_array() expects parameter 1 to be resource, boolean given警告:mysql_fetch_assoc()預計參數1是資源,鑑於對象

我似乎無法找出什麼我'做錯了。所以,當我提出我的形式我得到警告錯誤和

注意:未定義的變量:在/Library/WebServer/Documents/ArturoLuna_Final/loginCheck.php線30

$username = $_POST['username']; 
$password = $_POST['password']; 

if($username&&$password) 
{ 
    require 'conn.php'; 
    $query = "SELECT * FROM users WHERE username='$username'"; 
    $result = $mysql->query($query) or die(mysqli_error($mysql)); 
    $numrows = $result->num_rows; 

    if ($numrows!=0) 
    { 
     while($row = mysql_fetch_assoc($result)) 
     { 
      $dbusername = $row['username']; 
      $dbpassword = $row['password']; 
     } 

     //check to see if they match! 
     if($username==$dbusername&&$password==$dbpassword) 
     { 
      echo "youre In!"; 
     } 
     else 
     echo "incorrect password!"; 

    } 
    else 
     die("that user is dead"); 

    //echo $numrows; 

} 

else 

    echo ("Please Enter Username") 

數據庫用戶名是什麼我可能會做錯嗎?

+0

又是哪一行是第30行? – ajreal 2011-12-15 14:24:40

+1

請注意:在將用戶發送到數據庫之前,您不要轉義用戶名......閱讀「SQL注入」。 – EGOrecords 2011-12-15 14:28:44

+0

你應該看看使用準備好的語句 – Frank 2011-12-15 15:37:42

回答

6

您正在將傳統PHP MySQL函數mysql_*與MySQLi接口混合使用。在這種情況下,mysql_fetch_assoc()預計會使用mysql_query()創建資源句柄。

要獲取正確的結果,你需要使用的MySQLi的方法:

$row = $result->fetch_assoc(); 

而且當你在這,你可能要考慮讓代碼到MySQL注入的影響較小。 Properly escape任何用戶在將其插入查詢字符串之前都提供了輸入,或者更好的是使用MySQLi parameter binding facilities

10

變化

while($row = mysql_fetch_assoc($result)) 

while($row = $result->fetch_assoc()) 

你錯過了一個i關閉該功能的名稱,並混合了面向對象和程序代碼風格,讓你混合了mysql_*結果資源和mysqli_result對象。

相關問題