2015-07-28 29 views
0

請有人可以幫助我指導我正確的方向,讓這個代碼工作。我已經從PHP5.4遷移到PHP5.5,我想知道這是否會成爲困難的原因?如何在MySQLi中調試「查詢未執行」錯誤?

function auth($username, $password) { 

    // hash password using md5 encryption 
    $hash_pass = md5($password); 

    // prepare SQL query 
    $username = mysqli_real_escape_string($username); 

    $query = "SELECT * FROM `area51_users` WHERE `user_name`='".$username."'"; 


    if ($result = mysqli_query($Connection, $query) or die (mysqli_error()." (query not executed)")) { 
     if (mysqli_num_rows ($Connection, $result) > 0) { 
      // record exits 
      if ($row = mysqli_fetch_assoc($result) or die (mysqli_error())) { 

       if ($hash_pass == $row['user_password']) { 
        // password is valid 

        // setup sesson 
        session_start(); 

        $_SESSION['username'] = $username; 
        $_SESSION['CMS_AUTH'] = "YES"; 

        return true; 
       } 
       else { 
        return false; 
       } 
      } 
      else { 
       return false; 
      } 
     } 
     else { 
      return false; 
     } 
    } 
} 

目前我從第一個if語句中收到錯誤「query not executed」。

我是新來的PHP,並試圖全力以赴。

+0

首先查詢,請清楚,如果此查詢在過去(更新問題機構)的工作。當創建Connection時,請確保有錯誤捕獲器,http://php.net/manual/en/function.mysqli-connect.php,並且打開phpmyadmin甚至只是sql命令行並直接運行該查詢帶硬編碼用戶名的課程),以確保在簡單的語法錯誤中沒有錯字。這應該排除大部分奧卡姆剃刀 –

+0

我有點困惑,這將如何解決發生的錯誤。有沒有可能詳細說明? –

+0

有時候這個問題可能與你認爲的行不相關,並且在任何情況下都是很好的形式,以確保在出現問題時總是會錯誤捕獲連接和其他常見代碼以排除它。如果查詢過去的工作是關鍵信息。如果你可以連接成功,如果查詢本身沒有錯,並且查詢是按原樣工作的(這些php變量是),那麼這就排除了很多可能的問題。另一個完整性檢查是將垃圾文本添加到錯誤消息中,以確保這是正確的行,以防複製文件帶有複製粘貼代碼。 –

回答

0

的問題是$連接的範圍(這不是在您所在功能) - >檢查PHP變量的作用域http://php.net/manual/en/language.variables.scope.php

其次你的代碼有很多不必要的東西。

當您使用die時,您不需要if/else或返回false。 而不是死你應該使用例外!

盪滌代碼:

function auth($username, $password) 
{ 
//you need this variable!!! 
global $Connection; 

// hash password using md5 encryption 
$hash_pass = md5($password); 

// prepare SQL query 
$username = mysqli_real_escape_string($username); 
$password = mysqli_real_escape_string($password); 

$query = " 
    SELECT 
     * 
    FROM `area51_users` 
    WHERE 
     `user_name`= '" . $username . "' 
     AND `user_password` = '" . $password . "' 
"; 

if ($result = mysqli_query($Connection, $query)) { 
    if (mysqli_num_rows($Connection, $result) > 0) { 
     // record exits 
     if ($row = mysqli_fetch_assoc($result))) { 

      // setup sesson 
      session_start(); 

      $_SESSION['username'] = $username; 
      $_SESSION['CMS_AUTH'] = "YES"; 

      return true; 
     } 
    } 
} 

echo mysqli_error($Connection); 

return false; 
} 

你也可以加強與預處理語句(更安全) How can I prevent SQL injection in PHP?

+0

即使這是造成錯誤,你有任何機會有一個Git中心帳戶,我可以告訴你其餘的?也許這是其他文件中的東西? –

+0

請發佈錯誤信息 – ThaDafinser