2014-09-23 145 views
0

我有這樣的代碼:mysqli_num_rows()錯誤沒有返回字符串

$con=mysqli_connect("example","example","example","example"); 
function check_input($value) 
{ 
    global $con; 
    // Stripslashes 
    if (get_magic_quotes_gpc()) 
    { 
     $value = stripslashes($value); 
    } 
    // Quote if not a number 
    if (!is_numeric($value)) 
    { 
     $value = "'" . mysqli_real_escape_string($con, $value) . "'"; 
    } 
    return $value; 
} 
$checklogin = mysqli_query($con, "SELECT username, password FROM users WHERE username LIKE '".check_input($_POST['username'])."';"); 
if(mysqli_num_rows($checklogin) == 0) 
{ 
    echo "Username doesn't exist"; 
} 

而且我得到這個錯誤:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /home/u436120092/public_html/login.php on line 26 Username doesn't exist 

我知道該用戶名不存在,但是這不是問題,我經過測試,問題是mysqli_real_escape_string沒有返回字符串。

有人可以幫我嗎? 在此先感謝。

+3

STOP !!!!您正在使用MySQLi,因此請使用預準備語句/綁定變量。你絕對沒有任何藉口 – 2014-09-23 14:10:42

+1

你的代碼邏輯也是__double__引用字符串值,一旦在check_input()函數中,一次在SQL查詢語句中,這會給你一個無效的SQL語句.....這就是你的另一個原因應該使用綁定變量,它會處理所有的字符串引用 – 2014-09-23 14:11:16

+0

您是否選擇了數據庫? – iatboy 2014-09-23 14:11:30

回答

3

您的查詢呈現這樣的:

FROM users WHERE username LIKE ''blarg''; 

因爲:

$value = "'" . mysqli_real_escape_string($con, $value) . "'"; 

和:

LIKE '".check_input($_POST['username'])."'; 

格式不正確的查詢返回false這是boolean =>mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given

附加說明:

使用準備好的語句!

(對不起馬克,你得到了它第一,我沒看過的評論。)

0

可能是您的查詢沒有獲取數據表單數據庫。 請執行以下步驟:

1)首先回顯您的查詢並直接運行到mysql並確認其獲取數據。 2)如果查詢工作文件,然後使用'mysqli_num_rows($ result)'函數來獲取多少行收集。