【问题标题】:mysqli_num_rows Function [duplicate]mysqli_num_rows 函数
【发布时间】:2016-09-19 16:37:55
【问题描述】:

我被困住了……希望得到一些帮助。

我对这种情况有疑问。我一直在按照教程为我的网站添加搜索功能,但我收到以下错误:

警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,布尔值在 C:\xampp\htdocs\registracija\index.php 第 48 行给出

这是我的代码:

if ($password_form==$repassword_form) {

    $user=mysqli_query(
         $con,
         "SELECT * FROM users,
          WHERE username=username_form
          OR email=email_form
      ");
    $counter=mysqli_num_rows($user);
    if ($counter==0) {

      if (move_uploaded_file($temporary_name, $path)) {
            echo "YES!<br />";
          }       
          else   {
            echo "NO!<br />";
    }       
  } 
  else   {
        echo "ERROR!<br />Some Message!<br />";
   }

 }   
 else   { echo "ERROR!<br />Some Message!<br />";
 }
}
else { 
?>

【问题讨论】:

  • 您的查询失败了,您的代码假定没有任何事情会出错,而现在您正承受着假设的后果。
  • 看起来这是一个非常糟糕的教程。无论哪种方式,您都应该检查 mysql 错误,然后重写您的 SQL 查询。

标签: php mysqli row


【解决方案1】:

你的查询有错误,改一下:

"SELECT * FROM users,
      WHERE username=username_form
      OR email=email_form
  "

到这里去掉逗号:

"SELECT * FROM users
      WHERE username=username_form
      OR email=email_form
  "

此外,username_form 和 email_form 似乎很可能是字符串,因此您的最终查询可能应该如下所示:

"SELECT * FROM users
      WHERE username = '$username_form'
      OR email = '$email_form'
  "

您的查询失败,然后您尝试对此执行操作mysqli_num_rows()

您应该强烈考虑使用准备好的语句以避免 SQL 注入:

$stmt = $db->prepare("SELECT * FROM table WHERE username=:un AND email=:em");
$stmt->execute(array(':un' => $username_form, ':em' => $email_form));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

阅读这篇出色的文章here,了解有关 SQL 注入的更多信息。

【讨论】:

  • 为了保证 UV,您可能还想在相关变量上添加一美元或 2 美元
  • 这些变量周围可能有一些单引号,它们几乎肯定是text
  • 好的,我来加美元
  • 正要这样做...谢谢:)
  • 又一个有效促进 sql 注入的答案。
猜你喜欢
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
相关资源
最近更新 更多