使用全局变量的mysql查询

时间:2011-11-21 01:47:34

标签: php mysql

我正在尝试运行查询以激活用户的帐户。我不确定我是否遇到查询本身的问题,或者是否有其他我不知道的问题。这是代码:

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

1 个答案:

答案 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语法本身是完美的(而你的语法不是),也有太多其他原因超出了代码的控制范围,可能导致失败。