Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP mysql_num_rows()返回错误_Php_Mysql_Html_Error Log_Mysql Num Rows - Fatal编程技术网

PHP mysql_num_rows()返回错误

PHP mysql_num_rows()返回错误,php,mysql,html,error-log,mysql-num-rows,Php,Mysql,Html,Error Log,Mysql Num Rows,我有一个PHP登录脚本。这是用户可以创建新用户的部分。我的问题是我想检查用户是否存在,如果用户名不存在于表中,则创建新用户。但是,如果用户确实存在,我希望它在会话变量中返回一个错误。这是我现在的代码。这不包括我的数据库连接,但我知道它们确实有效。它的num\u rows()作为错误写入错误日志文件。代码如下: $username = mysql_real_escape_string($username); $query = "SELECT * FROM users WHERE username

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

$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或SHOW等语句有效。要检索受INSERT、UPDATE、REPLACE或DELETE查询影响的行数,请使用mysql\u impacted\u rows()

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

另外,更改查询:

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


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

我想你得把上面的换掉

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

要检查行是否存在,可以使用SELECT COUNT(*),您需要在
mysql\u query()
上执行错误检查
if(!$result)echo mysql\u error()
mysql\u error()
将告诉您查询失败的确切原因(这就是为什么
mysql\u num\u rows()
抱怨的原因。一些建议,您不需要“;”在查询中,你确定你能连接到数据库吗?可能是重复的,我从来没有听说过。我会看一看,我认为他不想“在重复时”执行更新虽然…我认为
INSERT IGNORE
更适合此任务,但否?
SELECT 1…LIMIT 1
会更快,否?不需要计算用户数,只需要知道存在一个。否,因为用户名已经是名称,一个包含$\u POST内容的变量
 $username = mysql_real_escape_string($username);
$username = mysql_real_escape_string($_POST[$username]);