【问题标题】:PHP mysql_num_rows() Returns errorPHP mysql_num_rows() 返回错误
【发布时间】:2011-12-05 18:58:51
【问题描述】:

我有一个 PHP 登录脚本。这是该人可以创建新用户的部分。我的问题是我想检查用户是否存在,如果用户名不存在于表中,则创建新用户。但是,如果用户确实存在,我希望它在会话变量中返回错误。这是我现在拥有的代码。这不包括我的数据库连接,但我知道它们确实有效。它的num_rows() 被写为error_log 文件中的错误。代码如下:

$username = mysql_real_escape_string($username);
$query = "SELECT * FROM users WHERE username = '$username';";
$result = mysql_query($query,$conn);
if(mysql_num_rows($result)>0) //user exists
{
    header('Location: index.php');
    $_SESSION['reg_error']='User already exists';
    die();
}
else
{
$query = "INSERT INTO users ( username, password, salt )
        VALUES ( '$username' , '$hash' , '$salt' );";
mysql_query($query);
mysql_close();
header('Location: index.php');

它给我的错误是

mysql_num_rows(): supplied argument is not a valid MySQL result resource in [dirctory name]

【问题讨论】:

  • 判断一行是否存在,可以使用SELECT COUNT(*)
  • 您需要对mysql_query() 进行错误检查。 if (!$result) echo mysql_error()
  • mysql_error() 会告诉你查询失败的确切原因(这就是mysql_num_rows() 抱怨的原因。
  • 一些建议,你不需要一个“;”在查询中,你确定你能够连接到数据库吗?

标签: php mysql html error-log mysql-num-rows


【解决方案1】:

mysql_num_rows()

从结果集中检索行数。 此命令仅对返回实际结果集的 SELECT 或 SHOW 等语句有效。 要检索受 INSERT、UPDATE、REPLACE 或 DELETE 查询影响的行数,请使用 mysql_affected_rows()。

而不是先执行SELECT *,然后执行mysql_num_rows(),您可以执行SELECT COUNT(*),然后通过获取字段(应该是0 或1)来检索行数。 SELECT COUNT 总是会返回一个结果(当然前提是查询语法是正确的)。

另外,更改查询:

$query = "SELECT * FROM users WHERE username = '$username';";

进入

$query = "SELECT * FROM users WHERE username = '" 
    . mysql_real_escape_string($username)  . "';";

【讨论】:

  • SELECT 1 ... LIMIT 1 会更快,不是吗?无需统计用户数量,只需要知道存在一个即可。
【解决方案2】:

只是出于好奇,你听说过 upserts 吗?即,“插入重复键”。在这种情况下,它们对您很有用,至少在您的用户名列是唯一键的情况下。

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

【讨论】:

  • 从未听说过。我去看看
  • 我认为他不想“重复”执行更新...我认为INSERT IGNORE 更适合这项任务,不是吗?
【解决方案3】:
 $username = mysql_real_escape_string($username);

我认为您必须将上述内容替换为

$username = mysql_real_escape_string($_POST[$username]);

【讨论】:

  • 否,因为 username 已经是具有 $_POST 内容的变量的名称
猜你喜欢
  • 2012-11-25
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2013-10-03
相关资源
最近更新 更多