web-dev-qa-db-ja.com

WPデータベースから値を取得する

なぜ私のSQL文は値を返さないのですか..これは間違っていますか?

<?php

        global $wpdb;
        $result = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->wp_frm_item_metas"));
        foreach ($result as $item){
            $eventname= $result->meta_value;
        }

        ?>

        <h2><?php echo $eventname;?></h2>

私がやっていることは、私は手ごわいフォームを使用してデータベースに格納されているデータを表示しています。

1
markyeoj

あなたのforeach機能は以下のようになるべきだと思います。

foreach ($result as $item){
            $eventname= $item->meta_value;
        }
3
Joiwoo

あなたのコードにはいくつかの問題があります。

  1. あなたまたはプラグインがwp_frm_item_metas$wpdbを追加していない限り、$wpdb$wpdb->wp_frm_item_metasが何であるかを認識していません。あなたは "未定義のプロパティ"エラーが発生し、あなたのクエリは機能しません。

    $wpdb->と任意のテーブル名を使用することはできません。それはうまくいきません。プロパティを$wpdbに追加する必要があります。 それほど難しいことではありません

  2. あなたのforeachは間違っています。あなたは$resultsをループしていますが、繰り返しのたびに$itemではなく$resultにアクセスする必要があります。そのようです:

    foreach ($result as $item){
      echo $item->meta_value;
    }
    
  3. ただし、クエリには制限的なlogin、つまりWHERE句は含まれていないため、wp_frm_item_metasテーブルのすべての行が返されます。だから、どちらも必要です... foreach($ result as $ item){$ eventname [] = $ item-> meta_value; echo $eventname;を使おうとした場合、これは意味がありません。
  4. あるいは、クエリと$wpdbメソッドの選択の両方が間違っています。これに近いものが必要なようです。

    $eventname = $wpdb->get_var(
      $wpdb->prepare(
        "SELECT meta_value* FROM $wpdb->wp_frm_item_metas WHERE something = %s",
        'something'
      )
    );
    

    ループを気にせずにecho $eventnameを実行できます。

  5. prepareメソッド呼び出しをどのように変更したかに注目してください。 $wpdb->prepareには2つの引数が必要です。あなたのコードもその時点で失敗したでしょう。

参考のために: https://codex.wordpress.org/Class_Reference/wpdb

そして作業中に デバッグを有効にしてください 。あなたがその単純な規則に従えば、あなたはこれの多くを発見したでしょう。

1
s_ha_dum