2011-01-28 205 views
0

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; 

    } 


?> 

试图解决这个代码块和不知道是什么意思。我正尝试使用我在散列和腌制后注册的明文密码重新登录。我觉得我很亲密,但有些错误。帮助为什么这是行不通的,也将不胜感激。

在此先感谢

回答

5

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

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

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

+2

+1 Zend引擎中的A *资源*是一个C指针。从[devzone.zend.com](http://devzone.zend.com/article/1024)文章:*“虽然PHP zval可以表示各种各样的内部数据类型,但无法表示一种数据类型完全在一个脚本中是指针,[...]也没有办法用传统的操作符来有效地处理它们,解决这个问题的方法是简单地用一个称为资源的基本上任意的标签来引用指针。 – netcoder 2011-01-28 19:38:43

2

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

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

0

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

这就是说,执行查询不会返回任何来自数据库的信息,只是对该记录集的引用(在PHP中它存储信息的地方)。然后,您将在诸如mysql_fetch_array之类的调用中使用该变量来检索实际的行信息。