2013-02-24 163 views
-2

基本上,我試圖使用一個類,我發現讓從數據庫中的用戶數據,它的解析如下圖所示,從下面的功能的陣列中的所有數據:PHP陣列無法訪問

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"; 
     } 
    } 
} 

如果我做了對的var_dump $結果則顯示以下

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

我怎樣才能訪問這些數據?我試着用以下方法調用它:

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

但它沒有顯示任何東西?

+2

您的腳本可能容易受到[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)的影響。 – Gumbo 2013-02-24 16:38:51

回答

2

即使只有一個結果,在這種情況下(我猜? )該陣列支持多個。

所以找到的第一個結果,然後採取電子郵件從:

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

這是工作,謝謝你! – 2013-02-24 16:36:46

+0

不客氣父親。 – 2013-02-24 16:36:56

0

您需要跟蹤數組的工作方式。首先,你必須陣列(1),然後到陣列另一瓦爾諸如「郵件」或1

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

關於什麼的

   this 
       \/ 
echo $results[0]["email"]; ? 
-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)."'"; 
} 
+0

答案完全沒有解釋性散文。我的臉---> :(: – 2013-02-24 16:39:31

+1

我已經知道,我只是想把它放在一個數組中更容易訪問,但我必須支持你提醒我關於保護我的「電子郵件」參數!謝謝 – 2013-02-24 16:40:21

-1

Marin Sagovac問題就是答案。

爲了將它分解一點,你的var_dump輸出顯示$ results是一個嵌套數組。輸出的第一部分:

array(1) { 
[0]=> 

表明$結果由含1個元素,在索引0的數組,因爲這正是PHP開始索引。這是馬林迴應的結果[0]部分。

$ results數組的元素0由包含8個元素的數組組成。

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

即使僅存在4實際結果,索引1-4,每一個的存在使得它們兩次可以通過索引或通過它的鍵來訪問。可以通過唯一鍵訪問的數組,與索引相反,被稱爲關聯數組。

因此,在這種情況下,要麼將返回相同的值:不是的var_dump

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

print_r功能也將正常工作。