-2

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

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

4 回答 4

2

即使在这种情况下只有一个结果(我猜?)该数组支持多个。

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

echo $results[0]['email'];
//   ^^^^^^^^^^^
//   first result
于 2013-02-24T16:36:01.393 回答
0

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

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

关于什么

             this
              \/
echo $results[0]["email"]; ?
于 2013-02-24T16:33:46.263 回答
-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)."'";
}
于 2013-02-24T16:38:31.273 回答
-1

Marin Sagovac的问题就是答案。

为了进一步分解,您的 var_dump 输出显示 $results 是一个嵌套数组。输出的第一部分:

array(1) { 
[0]=>

显示 $results 由一个包含 1 个元素的数组组成,索引为 0,因为这是 PHP 开始索引的地方。这是 Marin 回复的 $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 。

于 2013-02-24T16:56:11.337 回答