为什么mysqli_num_rows总是返回0?
问题描述:
如果数据库中存在单词,我希望在用户点击提交按钮后检查用户的输入。为什么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";
}
答
您的查询失败,因为你没有通过DB连接到:
$a = mysqli_query($data_check);
用于连接的变量是未知的,所以你需要自己的基础上:
$a = mysqli_query($connection, $data_check);
您可能必须使用>0
而不是==1
作为您的num_rows()
,因为可能有多条记录。
你的代码也打开了sql注入;使用准备好的声明。
在查询中使用PHP的error reporting和mysqli_error($connection)
。
还要确保你的连接实际上是mysqli_
而不是另一个api。
答
$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教程的连接。
答
最好的方法来做到这一点。
$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";
}
您确定它不会返回超过1吗?更重要的是,你可以[SQL注入](http://php.net/manual/en/security.database.sql-injection.php)开放,并且应该使用[Prepared Statements](http:// php。 net/manual/en/mysqli.quickstart.prepared-statements.php)而不是串联你的查询。特别是因为你没有逃避用户输入! –
我读过一篇文章,mysqli_num_rows将只返回1或0 @MagnusEriksson –
否..它返回查询中返回的行数。 “num_rows”=“行数”。如果您有关于php函数的问题,您应该始终从soure开始:[php手册](http://php.net/manual/en/mysqli-result.num-rows.php) –