我正在尝试运行查询以激活用户的帐户。我不确定我是否遇到查询本身的问题,或者是否有其他我不知道的问题。这是代码:
if($_SESSION['lastid']&&$_SESSION['random'])
{
$check= mysql_query('SELECT * FROM members WHERE id= "$_SESSION[lastid]" AND random = " $_SESSION[random]"');
$checknum = mysql_num_rows($check);
//$checknum = mysql_query($check) or die("Error: ". mysql_error(). " with query ". $check);
if($checknum != 0) // run query to activate the account
{
$acti= mysql_query('UPDATE members SET activation = "1" WHERE id= "$_SESSION[lastid]"');
die('Your account has been activated. You may now log in!');
}
else
{
echo('Invalid id or activation code.') . ' lastid: ' .$_SESSION['lastid'] . ' random: ' .$_SESSION['random'] ;
// die ('Invalid id or activation code.');
}
}
else
{
die('Could not either find id or random number!');
}
这是我从mysql获得的警告:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
resource in /hermes/bosweb26b/b2501/servername/folder/file.php on line 30
但是当我回显变量时,我得到了存储在数据库中的相同值:
Invalid id or activation code. lastid: 2 and random: 36308075
答案 0 :(得分:2)
您的查询字符串无效。您正在使用单引号('
),这意味着PHP不会插入您的会话变量。它会搜索一个看起来像$_SESSION[...]
的文字字符串。
如果您对查询调用进行了正确的错误检查,则会看到语法错误。
$check= mysql_query("SELECT * FROM members WHERE id= '{$_SESSION['lastid']}' AND random = {$_SESSION['random']}");
^ ^^ ^ ^ ^ ^ ^ ^ ^^
if ($check === FALSE) {
die("Query failed: " . mysql_error());
}
请注意^
,它指示查询调用的位置已更改。您的第二个$acti
查询也需要进行相同的更改。从不 EVER 假设查询成功。即使SQL语法本身是完美的(而你的语法不是),也有太多其他原因超出了代码的控制范围,可能导致失败。