Überprüfen ob Tabelle, Tabellenspalte oder Tabellenzeile existiert mit WPDB

WordPress bietet viele und einfache Möglichkeiten, um Daten zu speichern, ohne eigenen SQL-Code schreiben zu müssen.

Custom Fields (oder Post Metas) werden oft für allerhand Daten verwendet.
Man muss sich nicht selbst um Userinterfaces oder Update- und Löschmechanismen kümmern.

Doch die Tabellenstruktur von WordPress reicht oft nicht, oder ergibt bei größeren Projekten keinen Sinn.

Wenn es dann darum geht, kurze Checks und Überprüfungen an eigenen Tabellen durchzuführen, gehen mir die WordPress eigenen Mittel aus.

Daher nachfolgend ein paar Snippets als Hilfestellung:

Überprüfen ob Tabelle existiert

$table_exists = $wpdb->get_var( "SHOW TABLES LIKE '{$table_name}'" );

Das ist eine recht einfache Übung – {$table_name} ist dabei der Tabellennamen, auf den man überprüfen möchte.

Überprüfen ob Zeile existiert

$wpdb->get_row( "SELECT * FROM {$table_name} WHERE post_ID = {$post_id}" );
$wpdb->get_row( "SELECT post_ID FROM {$table_name} WHERE post_ID = {$post_id}" );

Dazu gibt es mehrere Möglichkeiten – siehe die Doku zu wpdb.
Hier wird aus einer Tabelle, hier dargestellt mit {$table_name}, eine Zeile mit einer bestimmen post_ID geholt.
Im ersten Fall werden alle Datenfelder der Zeile geholt. Für das Überprüfen ob eine Zeile vorhanden ist, könnte das zu viel an Information und Speicherbelegung sein.
Es reicht vollkommen, wenn ich mir nur ein Datenfeld oder eine Spalte aus der Zeile hole.

Überprüfen ob Spalte existiert

$columns = $wpdb->get_results(
"DESC {$table_name}"
);

{$table_name} ist wieder der Tabellenname.
DESC ist shorthand für DESCRIPTION. Mit obigem Befehl hole ich mir alle Informationen zu einer speziellen Tabelle. Ich bekomme nicht nur die Spaltennamen sondern eine Fülle an Infos..
In dem obigen Fall kommt ein Objekt an Arrays zurück. Jedes Array stellt eine Spalte dar. Ich kann diese Arrays mit einer Schleife durchlaufen, oder zb. auch das Objekt serialisieren und nach Text (= die spezielle Spalte) durchsuchen.

 

Dort wo es nötig ist, bitte nicht auf das Absichern der Abfragen vergessen. WordPress bietet dazu eine Hilfestellung mit $wpdb->prepare an.
Hineiws: Dabei handelt es sich nicht um prepared statements auf DB-Ebene sondern um WordPress-Funktionalität.

 

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.