PHP数组无法访问

时间:2013-02-24 16:31:01

标签: php mysql arrays

基本上,我正在尝试使用找到的类从数据库中获取用户数据,它正在解析数组中的所有数据,如下所示:

public function Get($field = NULL) {
        if ($field == NULL)
        {
            $data = array();
            while ($row = mysql_fetch_array($this->last_query))
            {
                $data[] = $row;
            }
        } 
        else
        {
            $row = mysql_fetch_array($this->last_query);
            $data = $row[$field];
        }
        return $data;
}

这是我用来调用此函数的PHP代码

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    if($_SESSION['csrfToken'] == $_POST['csrfToken']) {
        $email = $_POST['email'];
        $password = $Security->Salt($Security->secParam($_POST['password']));
        $DB->Query("SELECT * FROM `table` WHERE `email` = '$email' AND `password` = '$password'");
        if($DB->num_rows() > 0) {
            $results = $DB->Get();
        } else {
            echo "Account not found";
        }
    }
}

如果我在$ results上执行var_dump,则会显示以下内容

array(1) { 
    [0]=> array(8) { 
        [0]=> string(1) "1" ["id"]=> string(1) "1" 
        [1]=> string(35) "email@email.com" ["email"]=> string(35) "email@email.com" 
        [2]=> string(32) "4f14dfef1efe0de64e2b176eac6051cd" ["password"]=> string(32) "4f14dfef1efe0de64e2b176eac6051cd" 
        [3]=> string(1) "1" ["status"]=> string(1) "1" 
    } 
}

我该如何访问这些数据?我试过通过以下方式调用它

$email = $results['email'];
echo $email;

但它没有显示任何内容?

4 个答案:

答案 0 :(得分:2)

即使在这个实例中只有一个结果(我猜?),该数组支持多个。

所以找到第一个结果,然后从中获取电子邮件:

echo $results[0]['email'];
//   ^^^^^^^^^^^
//   first result

答案 1 :(得分:0)

您需要跟踪数组的工作方式。首先你有数组(1)然后进入数组另一个变量,如“email”或1。

array(1) {  <---- THIS IS ARRAY OCCURED FOR FIRST "0" ARRAY.

关于什么

             this
              \/
echo $results[0]["email"]; ?

答案 2 :(得分:-1)

if($_SERVER['REQUEST_METHOD'] == 'POST' && $_SESSION['csrfToken'] == $_POST['csrfToken']) {
    $password = $Security->Salt($Security->secParam($_POST['password']));
    $password = $DB->quoteStr($password);
    $email = $DB->quoteStr($_POST['email']);
    $DB->Query("SELECT * FROM `table` WHERE `email` = $email AND `password` = $password");
    return $DB->GetRow();
}

public function GetRow() {
    return mysql_fetch_array($this->last_query);
}
public function quoteStr($str) {
    return "'".mysql_real_escape_string($str)."'";
}

答案 3 :(得分:-1)

Marin Sagovac问题就是答案。

为了将其分解一点,你的var_dump输出显示$ results是一个嵌套数组。输出的第一部分:

array(1) { 
[0]=>

表明$ results包含一个包含1个元素的数组,索引为0,因为这是PHP开始索引的地方。这是马林回应的$ results [0]部分。

$ results数组的元素0由一个包含8个元素的数组组成。

[0]=>array(8) { 
[0]=> string(1) "1" ["id"]=> string(1) "1"  
[1]=> string(35) "email@email.com" ["email"]=> string(35) "email@email.com" 

即使只有4个实际结果,索引1-4,每个结果都存在两次,因此它们可以通过索引或其键访问。可以通过唯一键访问的数组(而不是索引)称为关联数组。

因此,在这种情况下,要么返回相同的值:

echo $results[0]["email"];
echo $results[0][1];

print_r函数也可以,而不是var_dump。