webentwicklung-frage-antwort-db.com.de

Abrufen eines Wertes aus einer WP-Datenbank

warum gibt meine SQL-Anweisung keinen Wert zurück? Ist das falsch?

<?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>

Was ich tue ist, ich zeige die in der Datenbank gespeicherten Daten in beeindruckender Form an. (Nicht Pro). Stimmt etwas mit meinem Code nicht?

1
markyeoj

Ich glaube, dass Ihre foreach-Funktion wie folgt aussehen sollte:

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

Es gibt verschiedene Probleme mit Ihrem Code.

  1. Sofern Sie oder ein Plugin wp_frm_item_metas nicht zu $wpdb hinzugefügt haben, hat $wpdb keine Ahnung, was $wpdb->wp_frm_item_metas ist. Sie erhalten die Fehlermeldung "Undefinierte Eigenschaft", und Ihre Abfrage funktioniert nicht.

    Sie können nicht einfach $wpdb-> plus einen Tabellennamen verwenden. Das geht nicht Sie müssen die Eigenschaft zu $wpdb hinzufügen, was nicht so schwer ist .

  2. Ihre foreach ist falsch. Sie durchlaufen eine Schleife über $results, müssen jedoch bei jeder Iteration auf $item und nicht auf $result zugreifen. Wie so:

    foreach ($result as $item){
      echo $item->meta_value;
    }
    
  3. Ihre Abfrage enthält jedoch keine einschränkende Anmeldung - keine WHERE-Klausel -, sodass jede Zeile in der wp_frm_item_metas-Tabelle zurückgegeben wird. Also, entweder brauchen Sie das ... foreach ($ result als $ item) {$ eventname [] = $ item-> meta_value; } ..., was bei dem Versuch, echo $eventname; zu schreiben, keinen Sinn ergibt
  4. Oder Ihre Abfrage und die Auswahl der $wpdb-Methode sind falsch. Mir scheint, Sie brauchen etwas Näheres:

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

    Sie können jetzt echo $eventname ohne die Mühe der Schleife.

  5. Beachten Sie, wie ich den Methodenaufruf prepare geändert habe. $wpdb->prepare muss zwei Argumente haben. Ihr Code wäre an diesem Punkt ebenfalls fehlgeschlagen.

Als Referenz: https://codex.wordpress.org/Class_Reference/wpdb

Und bitte aktivieren Sie das Debuggen , während Sie arbeiten. Sie hätten viel davon bemerkt, wenn Sie diese einfache Regel befolgt hätten.

1
s_ha_dum