0

我有一个 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]
4

3 回答 3

1

mysql_num_rows ()

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

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

另外,更改查询:

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

进入

$query = "SELECT * FROM users WHERE username = '" 
    . mysql_real_escape_string($username)  . "';";
于 2011-10-12T02:54:15.983 回答
0

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

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

于 2011-10-12T02:58:51.547 回答
0
 $username = mysql_real_escape_string($username);

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

$username = mysql_real_escape_string($_POST[$username]);
于 2011-10-12T03:38:46.197 回答