2017-08-15 248 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"; 
}