2017-08-15 254 views
1

如果數據庫中存在單詞,我希望在用戶點擊提交按鈕後檢查用戶的輸入。爲什麼mysqli_num_rows總是返回0?

因此,我有這個代碼。然而,它總是說數據不存在,它發現條件爲false。

我的代碼在下面有什麼問題?

$input_word = trim($_POST["word"]); 
$data_check = "SELECT * FROM word_collections WHERE single_word = '$input_word'"; 
$a = mysqli_query($data_check); 
if (mysqli_num_rows($a) == 1) 
{ 
    echo "Data exist."; 
} 
else 
{ 
    echo "Data DOES NOT exist"; 
} 
+1

您確定它不會返回超過1嗎?更重要的是,你可以[SQL注入](http://php.net/manual/en/security.database.sql-injection.php)開放,並且應該使用[Prepared Statements](http:// php。 net/manual/en/mysqli.quickstart.prepared-statements.php)而不是串聯你的查詢。特別是因爲你沒有逃避用戶輸入! –

+0

我讀過一篇文章,mysqli_num_rows將只返回1或0 @MagnusEriksson –

+0

否..它返回查詢中返回的行數。 「num_rows」=「行數」。如果您有關於php函數的問題,您應該始終從soure開始:[php手冊](http://php.net/manual/en/mysqli-result.num-rows.php) –

回答

5

您的查詢失敗,因爲你沒有通過DB連接到:

$a = mysqli_query($data_check); 

用於連接的變量是未知的,所以你需要自己的基礎上:

$a = mysqli_query($connection, $data_check); 

您可能必須使用>0而不是==1作爲您的num_rows(),因爲可能有多條記錄。

你的代碼也打開了sql注入;使用準備好的聲明。

在查詢中使用PHP的error reportingmysqli_error($connection)

還要確保你的連接實際上是mysqli_而不是另一個api。

0
$input_word = trim($_POST["word"]); 
    $data_check = "SELECT * FROM word_collections WHERE single_word = '$input_word'"; 
         $con = mysqli_connect("host",'id','pass','dbname'); // add this connection 
         $a = mysqli_query($con,$data_check); 
         if (mysqli_num_rows($a) == 1) 
         { 
          echo "Data exist."; 
         } 
         else 
         { 
          echo "Data DOES NOT exist"; 
         } 

你需要把mysqli_query參數1.您可以參考從w3schools教程的連接。

0

最好的方法來做到這一點。

$dbhost = 'localhost'; 
$dbuser = 'username'; 
$dbuser = 'password'; 
$dbpass = 'dbname'; 
$dbConn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); 

$query = "SELECT * FROM word_collections WHERE single_word = '$input_word'"; 

$result = $dbConn->query($query); 
if($result->num_rows == 1){ 
    echo "have some records"; 
}else{ 
    echo "No records"; 
}