web-dev-qa-db-ja.com

$ wpdbで配列を取得する方法

データベーステーブルからデータを選択するスニペットがあります。しかし、私はエラーが発生しました:Warning: Invalid argument supplied for foreach()

私は新しいエラーが発生しました:この行のNotice: Trying to get property of non-objectecho $result->Name;

スニペット(更新):

$results = $wpdb->get_results( 'SELECT DATE_FORMAT(FROM_UNIXTIME(submit_time), "%b %e, %Y  %l:%i %p") AS Submitted,
                    MAX(IF(field_name="Name", field_value, NULL )) AS "Name",
                    MAX(IF(field_name="Email", field_value, NULL )) AS "Email",
                    MAX(IF(field_name="Subject", field_value, NULL )) AS "Position",
                    MAX(IF(field_name="Message", field_value, NULL )) AS "Message"
                    FROM tablename
                    WHERE form_name = "Resume"
                    GROUP BY submit_time
                    ORDER BY submit_time DESC', ARRAY_A);

foreach($results as $result){
    echo $result->Name;
}

リンク

1
saphus

WHEREの前にGROUP BYORDER BYを使用することはできませんあなたのクエリに問題があります

取り替える

FROM tablename GROUP BY submit_time ORDER BY submit_time DESC

FROM tablename

これはあなたの質問です

$results = $wpdb->get_results( 'SELECT DATE_FORMAT(FROM_UNIXTIME(submit_time), "%b %e, %Y  %l:%i %p") AS Submitted,
            MAX(IF(field_name="Name", field_value, NULL )) AS "Name",
            MAX(IF(field_name="Email", field_value, NULL )) AS "Email",
            MAX(IF(field_name="Subject", field_value, NULL )) AS "Position",
            MAX(IF(field_name="Message", field_value, NULL )) AS "Message"
            FROM tablename
            WHERE
            form_name = "Resume"
            GROUP BY submit_time
            ORDER BY submit_time DESC', ARRAY_A);
2
Ahed Eid

ワイルドスタブを取りに行くが、ARRAY_Aは連想配列を返す

それからあなたはオブジェクトとしてこの連想配列にアクセスしようとしています

簡単な変更:

foreach($results as $result){
    echo $result->Name;
}

に:

foreach($results as $result){
    echo $result['Name'];
}

そしてエラーは消えます!

2
Jamie

$wpdb->get_resultsは多次元配列を返します。だからforeachのための引数は次のようになります。

foreach($results as $object=>$result){
    echo $result->Name;
}

アクセスする前に、必ずオブジェクトと配列をvar_dumpしてください。

0
Swopnil Dangol