Konvertieren von SQL nach PHP

  • Hallo zusammen,
    ich suche schon stunden/tagelang nach einer Möglichkeit, um SQL-Code (von phpMyAdmin) nach PHP zu konvertieren und mit einem eigenen Plugin aufzurufen. Nachdem ich keine Lösung gefunden habe, bitte ich um eure Mithilfe.
    Der folgende SQL-Code

    SQL
    UPDATE wp_lws_comments
    SET `comment_type` = 'guestbook comment'
    WHERE `comment_post_ID` = '13'
    AND `comment_type` = '';

    soll in eine PHP-Datei eingefügt werden ($wpdb usw.).
    Im Codex gibt es keine Beispiele für Update und Where, wobei ich an Zufügen von Where nicht weitergekommen bin. Der von phpMyAdmin erzeugte PHP-Code funktioniert leider auch nicht.
    Gibt es für diesen Zweck ggf. einen Konverter? Im Netz habe ich leider nichts gefunden.
    Wenn mir ein Spezialist den obigen Code als (lauffähigen) PHP-Code umschreiben könnte, wäre ich dankbar. Dann könnte ich die letzte Erweiterung meines Plugins abschließen.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Z. B. diesen Code habe ich versucht umzustricken:
    Quelle: https://pl%c3%b6tzlich-selbst%c3%a4ndig.de/programmieren/…prepare-update/

    Where konnte ich ohne Fehlermeldungen nicht hinzufügen:

    Code
    where comment_post_ID = '13' && comment_type = ''

    So langsam fällt mir nix mehr ein, was ich noch versuchen könnte.
    Hast du eine Idee?

  • So was funktioniert, aber es ist nicht das Richtige für meinen Zweck:

    Code
    $options = get_option('wphgb_settings');
    $wphgb_id = ($options['wphgb_text_field_0']); // Gästebuch-ID abfragen
    
    
    global $wpdb;
    $user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments where comment_post_ID = $wphgb_id && comment_type = ''");
    echo "<p>User count isxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx{$user_count}
  • Hier mein Code:

    Code
    global $wpdb;
    $wpdb->insert(
        $wpdb->prefix.'comments',
        array(
            'comment_type' => 'guestbook comment',
        ),
        array(
            '%s', //name
        )
    );

    Damit erzeuge ich einen neuen Eintrag in der Spalte "comment_type" mit dem Wert "guestbook comment".
    Der Eintrag soll aber nur in Zeilen mit "comment_post_ID = 13" und leerer Zelle "comment_type" erfolgen.

    Mein Problem ist, dass ich die where-Bedingung nicht richtig in den Code rein bekomme.

  • Benutze [FONT=Courier New]->update(..[/FONT] statt [FONT=Courier New]->insert(..[/FONT]

    Anhand des Codex-Beispiels und Deiner o.g. verlinkten Anleitung würde Dein Code

    PHP
    UPDATE wp_lws_comments
    SET `comment_type` = 'guestbook comment'
    WHERE `comment_post_ID` = '13'
    AND `comment_type` = '';

    in etwa so aussehen (ungetestet):

    7 Mal editiert, zuletzt von b3317133 (29. März 2018 um 13:30)

  • Super! Herzlichen Dank!
    Das hat nun geklappt. Ich dachte nicht, dass die where-Bedingung als Array eingefügt wird. Deshalb meine vergeblichen Versuche, da dieser Umstand in den gefundenen Quellen nicht erwähnt wird.
    Hier mein fertiger Code für diesen Teil des Plugin:

    Code
    // Comment Type für alte Einträge setzen
    $options = get_option('wphgb_settings');
    $wphgb_id = ($options['wphgb_text_field_0']); // Gästebuch-ID abfragen
    global $wpdb;
    $wpdb->update($wpdb->prefix . 'comments',
     array('comment_type' => 'guestbook comment'),
     array('comment_post_ID' => $wphgb_id, 'comment_type' => ''),
     array('%s',),
     array('%d', '%s')
     )

    Zum Hintergrund:
    Ich habe vor einiger Zeit ein Gästebuch-Plugin auf Basis der Kommentarfunktion erstellt, wobei die GB-Einträge bei vielen Kommentaren darin untergehen. Durch Filtern nach dem comment-type wurden die GB-Einträge aufgelistet; allerdings nur die neuen Einträge. Bei alten Einträgen stand in comment_type nichts drin. Da mein Gästebuch bei mindestens 50 Websites benutzt wird und i. d. R. alte Einträge vorhanden sind, wollte ich diese in die Auflistung für das Plugin-Update mit einbeziehen.
    Ich werde nun alles gründlich testen und dann das Plugin in neuer Version freigeben. Bei Interesse kannst du das Plugin auch unverbindlich antesten. Die bisherige Version ist hier eingestellt; zusätzlich gehostet auf GitHub.

  • Ich dachte nicht, dass die where-Bedingung als Array eingefügt wird. Deshalb meine vergeblichen Versuche, da dieser Umstand in den gefundenen Quellen nicht erwähnt wird.


    Codex:

    Zitat

    where (array)
    A named array of [FONT=Courier New]WHERE[/FONT] clauses (in [FONT=Courier New]column => value[/FONT] pairs). Multiple clauses will be joined with [FONT=Courier New]AND[/FONT]s.


    Deine verlinkte Quelle:

    Zitat

    Die zwei neuen Arrays stellen also die WHERE-Abfrage dar.


    Zum Code, evtl. sollte man noch prüfen, ob a) die option [FONT=Courier New]wphgb_settings[/FONT] und b) [FONT=Courier New]$options['wphgb_text_field_0'][/FONT] überhaupt was enthält.

    4 Mal editiert, zuletzt von b3317133 (29. März 2018 um 14:40)

  • Zitat

    where (array)
    A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs.

    OK. Übersehen beim Lesen des Textes. Ich war total auf "where" fixiert.

    Danke für den Tip und deine Hilfe.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!