【问题标题】:Why mysqli_num_rows always returns NULL?为什么 mysqli_num_rows 总是返回 NULL?
【发布时间】:2014-09-02 09:04:02
【问题描述】:

我想计算 users 表中具有特定名称和 pwd 的行,如果存在应该为 1。 但无论用户是否存在,结果总是返回 null(不是 0)。 我什至将查询简单地更改为“SELECT * FROM users”,并以相同的结果结束。 而且我很确定 DATABASE 和 TABLE 的名字都是真的,而且表不是空的!

顺便说一句,为什么我必须在“mysqli_query”之前使用“@”符号才能消除错误? 谢谢!

enter code here
<?php
   #$mysql_db_hostname = "localhost";
   $mysql_db_hostname = "127.0.0.1";
   $mysql_db_user = "root";
   $mysql_db_password = "";
   $mysql_db_database = "smartFSUsers";
   $con = mysqli_connect($mysql_db_hostname, $mysql_db_user,       $mysql_db_password,$mysql_db_database);
   if (!$con) {
       trigger_error('Could not connect to MySQL: ' . mysqli_connect_error());
     }
   $name = $_GET["name"];
   $password = $_GET["password"];
   $query = "SELECT * FROM users WHERE name='$name' AND password='$password'";
   $result =@mysqli_query($query,$con);
   echo($result);
   $row=@mysqli_num_rows($result);
   echo"the row num is $row \n";
   ?>

【问题讨论】:

  • 在函数调用前使用@ 可以隐藏错误。最好关闭 @ 并修复错误。
  • 也许如果您没有塞住耳朵并通过使用@ 错误抑制运算符来“lalalalalalala 听不到您的声音”,您实际上可以从您的代码中获得一些错误消息/警告。另外,可爱的SQL injection attack 漏洞。享受您的服务器 pwn3d。
  • 虽然我们讨论的是如何正确地做事,但您对 SQL 注入持开放态度!
  • 我为什么要检查漏洞或错误。我只是要做 Dr.Evil 风格的小指到我的嘴角,然后 “不不不,我要进行函数调用,而不是检查是否发生错误,我'我只是假设一切都按计划进行。什么?”

标签: php mysql apache http


【解决方案1】:

RTM:http://php.net/mysqli_query

$result =@mysqli_query($query,$con);

你的参数被颠倒了。 $con 必须先到:

$result = mysqli_query($con, $query) or die(mysqli_error());

如果您费心在代码中添加纠错功能,您就会被告知这一点。但是不,您选择@ 来隐藏所有这些错误消息。

【讨论】:

  • 最好只包含正确的代码而不是损坏的示例。
  • @tadman:太多人去重新解决他们的问题以隐藏错误。
  • 也许吧。我认为你的固定版本是独立的,而另一个只是妨碍了。
猜你喜欢
  • 1970-01-01
  • 2014-09-12
  • 2019-09-18
  • 2015-02-27
  • 2021-01-10
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多