什么是“资源#”?

时间:2011-01-28 17:44:45

标签: php mysql variables hash passwords

HI

当我打印以下变量时,我得到资源#6和资源#7:

$salty_password = sha1($row['salt'], $_POST['password']);

if(isset($_POST['subSignIn']) && !empty($_POST['email']) && !empty($_POST['password'])) {


    $query =  "SELECT `salt` FROM `cysticUsers` WHERE `Email` = '" . $_POST['email'] . "'";
    $request = mysql_query($query,$connection) or die(mysql_error());
    $result = mysql_fetch_array($request);



    $query2 = "SELECT * FROM `cysticUsers` WHERE `Email` = '". $_POST['email']."' AND `Password` = '$salty_password'";
    $request2 = mysql_query($query2,$connection) or die(mysql_error());
    $result = mysql_fetch_array($request2);

    print_r($request);
    print_r($request2);

if(@mysql_num_rows($request,$request2)) {


        $_SESSION['CLIFE']['AUTH'] = true;
        $_SESSION['CLIFE']['ID'] = $result['id'];

        // UPDATE LAST ACTIVITY FOR USER
        $query = "UPDATE `cysticUsers` SET `LastActivity` = '" . date("Y-m-d") . " " . date("g:i:s") . "' WHERE `id` = '" . mysql_real_escape_string($_SESSION['CLIFE']['ID']) . "' LIMIT 1";
        mysql_query($query,$connection);


        if(!empty($_POST['return'])) {
            header("Location: " . $_POST['return']);

        }else{
            header("Location: CysticLife-Dashboard.php?id=" . $_SESSION['CLIFE']['ID']);
            }
        }

    }else{

        $_SESSION['CLIFE']['AUTH'] = false;
        $_SESSION['CLIFE']['ID'] = false;

    }


?>

尝试对此代码块进行故障排除,但不确定这意味着什么。我正在尝试使用我在哈希和盐腌后注册的明文密码重新登录。我觉得我非常接近,但有点不对劲。关于为什么不起作用的帮助也将不胜感激。

提前致谢

3 个答案:

答案 0 :(得分:5)

mysql_query()将结果集作为resource类型的对象返回(根据PHP OOP代码,它们不是对象,但我想不出更好的词) 。它们包含只能由某些函数读取的二进制数据,例如mysql_fetch_*()函数。

要调试MySQL查询,您应该使用mysql_error()mysql_errno()检查错误和/或将SQL语句保存在变量中并打印出来。

从我看到的情况来看,您正在执行两个查询,但会覆盖相同的$result变量,而不会对第一个执行任何操作。此外,mysql_num_rows()一次只能计算一个结果集,因此您无法将两个结果集传递到同一个调用中。

答案 1 :(得分:2)

这些是PHP的内部数据类型resource

它们无法序列化(即没有“toString()”),因此显示为Resource#X

答案 2 :(得分:0)

通过PHP进行的SQL查询是使用称为资源的变量完成的。在您的代码中,此变量除了传递给您要执行的每个函数(即更改数据库,执行查询,获取最后一个错误等)之外完全没用。

话虽这么说,执行查询不会返回来自数据库的任何信息,只是对该记录集的引用(在PHP中存储信息的位置)。然后,您可以在mysql_fetch_array等调用中使用该变量来检索实际的行信息。