2013-10-21 28 views
-2

這是令人尷尬的,但我試圖獲得相同的腳本來運行,我以前有錯誤。我已經完成了這個錯誤消息的搜索,但不知道我需要做些什麼來修復這個特定的腳本。在PHP中的錯誤消息:「警告:mysqli_num_rows()期望參數1是mysqli_result,布爾值...」

完整的錯誤信息是:

警告:mysqli_num_rows()預計參數1被mysqli_result,在C定的boolean:\ Program Files文件\深淵Web服務器\ htdocs中\ login_tools.php上線59

腳本的這部分似乎被列爲警告的來源。

如果(mysqli_num_rows($ R)== 1)

較大的一節:

if (empty($errors)) 
{ 
$q = "SELECT user_id, first_name, last_name, 
     FROM users 
     WHERE email = '$e' 
     AND pass = SHA1('$p') " ; 

$r = mysqli_query ($dbc , $q) ; 

if (mysqli_num_rows($r) == 1) 
{ 
    $row = mysqli_fetch_array ($r , MYSQLI_ASSOC) ; 
    return array(true , $row) ; 
} 

else 

{ $errors[] = 'Email address and password not found.' ; } 

} 

return array(false , $errors) ; } 

?>  
+0

請切換到[已準備好的語句](http://bobby-tables.com/php.html)以防止SQL注入。順便說一句,只使用普通的SHA1來散列密碼是不夠的;請參閱http://php.net/manual/en/faq.passwords.php。 –

回答

1

SQL代碼有錯誤:

$q = "SELECT user_id, first_name, last_name**,** 
     FROM users 
     WHERE email = '$e' 
     AND pass = SHA1('$p') " ; 

將其更正爲

$q = "SELECT user_id, first_name, last_name 
     FROM users 
     WHERE email = '".$e."' 
     AND pass = SHA1('".$p."') " ; 

刪除 '' 字後標記 '姓氏'

+1

您不必從字符串中拉出'$ e'和'$ p',這些將在用''s'分隔的字符串中解析。所以,最好避免直接在SQL語句中使用變量,並切換以準備好的陳述 –

1

這是因爲

if ($r = mysqli_query ($dbc , $q)) { 
    // got something! 
    } 

返回FALSE。在將其用作結果集之前,您必須測試返回值。您的SQL聲明中有錯誤。您在查詢中的last_name列之後放置了不必要的逗號。

請務必在代碼中使用它之前先測試該查詢。

+0

謝謝,我希望這可以工作,我迫不及待地想完成這本初學者的PHP書籍 –

+0

最受歡迎:) – Amit

相關問題