-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

このインスタンスには結果が 1 つしかありませんが (推測しますか?)、配列は複数をサポートします。

最初の結果を見つけて、そこからメールを受け取ります。

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

配列の仕組みを追跡する必要があります。最初にarray(1)があり、次に配列に「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 は、インデックス 0 で 1 つの要素を含む配列で構成されていることを示しています。これは、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" 

実際の結果はインデックス 1 ~ 4 の 4 つしかありませんが、それぞれが 2 回存在するため、インデックスまたはそのキーによってアクセスできます。インデックスではなく一意のキーでアクセスできる配列は、連想配列と呼ばれます。

したがって、この場合、どちらも同じ値を返します。

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

var_dumpの代わりに、 print_r関数も機能します。

于 2013-02-24T16:56:11.337 に答える