首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP mysql_num_rows()返回错误

问PHP mysql_num_rows()返回错误
EN

Stack Overflow用户
提问于 2011-10-12 10:50:54
回答 3查看 1.6K关注 0票数 0

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

代码语言:javascript
复制
$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');

它给我的错误是

代码语言:javascript
复制
mysql_num_rows(): supplied argument is not a valid MySQL result resource in [dirctory name]
EN

回答 3

Stack Overflow用户

发布于 2011-10-12 10:54:16

mysql_num_rows()

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

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

另外,更改查询:

代码语言:javascript
复制
$query = "SELECT * FROM users WHERE username = '$username';";

转到

代码语言:javascript
复制
$query = "SELECT * FROM users WHERE username = '" 
    . mysql_real_escape_string($username)  . "';";
票数 1
EN

Stack Overflow用户

发布于 2011-10-12 10:58:52

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

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

票数 0
EN

Stack Overflow用户

发布于 2011-10-12 11:38:46

代码语言:javascript
复制
 $username = mysql_real_escape_string($username);

我认为你必须将上面的内容替换为

代码语言:javascript
复制
$username = mysql_real_escape_string($_POST[$username]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7734730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档