2015-10-16 81 views
-2

我加入以下行:mysqli_num_rows()預計參數1被mysqli_result,串給出錯誤

$userquery = mysqli_real_escape_string ($db, $userquery); 

之前我說這是工作的代碼,現在我得到以下2個錯誤:

mysqli_real_escape_string() expects parameter 2 to be string, object given 

mysqli_num_rows() expects parameter 1 to be mysqli_result, null given 

代碼

$userquery = mysqli_query($db, "SELECT * FROM staff WHERE forename = '$forename'") or die ("error getting information from database."); 
    $userquery = mysqli_real_escape_string ($db, $userquery); 
    if (mysqli_num_rows($userquery) == null){ 
     die ("No staff directory found"); 
    } 

誰能告訴我爲什麼我得到這些錯誤,我能做些什麼來解決這些問題?

我明白第一個錯誤是因爲$ userquery被使用了兩次,但是如果我不使用它兩次,我該如何使用mysqli_real_escape_string擴展名?

我試圖改變它擺脫了錯誤的第一$ userquery的變量名,但隨後出現新的錯誤:

mysqli_real_escape_string() expects parameter 2 to be string, object given 
+0

你正在重寫'$ userquery',其中包含你的查詢結果。你需要將'mysqli_real_escape_string()'移到'mysqli_query()'上面。 – Henders

+0

我也試過,但後來我有錯誤:未定義的變量:userquery –

+0

在mysqli_real_escape_string()這裏閱讀(http://php.net/manual/en/mysqli)可能很有用。實時逃生string.php)。 您需要先通過該函數放置查詢字符串,然後將乾淨的字符串放入查詢中。 – Henders

回答

1
$forename= mysqli_real_escape_string ($forename); 
    $userquery = mysqli_query($db, "SELECT * FROM staff WHERE forename = '$forename'"); 
     $result= mysqli_fetch_object ($userquery); 
     if (mysqli_num_rows($result) == null){ 
      die ("No staff directory found"); 
     } 

先帶你不能變 的各種名稱採取$ userquery這兩個時間,並分配不同的價值,所以採取差異我拿$result

+0

mysqli_real_escape_string需要2個參數 –

+0

當然,你需要轉義字符串_before_你把它放入查詢中,否則使用該函數沒有意義。加'mysqli_real_escape_string()'期望第二個參數是一個字符串。在這個例子中,你將'mysqli_query'的結果傳遞給boolean或mysqli_result對象。 – Henders

0

您正在使用mysqli_real_escape_string到所有查詢結果,並打算與一個字符串一起使用。使用你的例子,你需要:

$forename_escaped = mysqli_real_escape_string ($db, forename); 
$userquery = mysqli_query($db, "SELECT * FROM staff WHERE forename = '$forename_escaped'") or die ("error getting information from database."); 
if (mysqli_num_rows($userquery) == null){ 
    //do stuff 
} 
+0

你已經共享這個例子已經努力擺脫錯誤。你不認爲mysqli_real_escape_string應該被添加在那裏,以防止用戶輸入,比如「'或者像%g% –

+0

這樣的名字應該被添加,但是你提出的情況是一個SELECT語句,Tu用來逃避用戶輸入,你應該像這樣使用: mysqli_query($ db,'INSERT INTO staff set forename =''。mysqli_real_escape_string($ db,$ forename)。'「); – freixedelo

+0

儘管SQL注入攻擊仍然可以在SELECT語句中執行,只是因爲它沒有注入任何東西到數據庫中,它仍然可以繪製可能是私人的信息。 –

0
$forename = mysqli_real_escape_string ($db, $forename); 
$sql = "SELECT * FROM staff WHERE forename = '$forename'"; 
$res = mysqli_query($db, $sql) or trigger_error ($db->error); 
if (!mysqli_num_rows($res)){ 
    die ("No staff directory found"); 
} 
-1
$userquery = mysqli_query($db, "SELECT * FROM staff WHERE forename = '$forename'") or die ("error getting information from database."); 
    $userquery = mysqli_real_escape_string ($userquery); 
    if (mysqli_num_rows($userquery) == 0){ 
     die ("No staff directory found"); 
    } 


首先,
mysqli_real_escape_string()只是一個參數,它是從mysqli_query結果值。
secord,
mysqli_num_rows返回一個整數值,所以你不能使用NULL。

希望給你幫忙

相關問題