WPDB - das unbekannte Objekt

19
WPMeetup Hannover, 25.09.2013 Frank Staude <[email protected]> WPDB – das unbekannte Objekt. Mittwoch, 25. September 13

Transcript of WPDB - das unbekannte Objekt

Page 1: WPDB -  das unbekannte Objekt

WPMeetup Hannover, 25.09.2013Frank Staude <[email protected]>

WPDB – das unbekannte Objekt.

Mittwoch, 25. September 13

Page 2: WPDB -  das unbekannte Objekt

Datenbank / Singlesite Installation

• 11 Tabellen

• Benennung: Prefix (Bei der Installation angegeben, default: wp_ ) + Name. Die Tabelle Posts heisst in einer default Installation wp_posts

Mittwoch, 25. September 13

Page 3: WPDB -  das unbekannte Objekt

Datenbank / Multisite aktiviert

• 17 Tabellen, 6 Tabellen sind durch die Multisite hinzugekommen.

Mittwoch, 25. September 13

Page 4: WPDB -  das unbekannte Objekt

Datenbank / Multisite mit 2 Sites

• 9 Tabellen pro Site, Schema: Prefix.BlogID_Name. Z.B: wp_2_posts für Posts Tabelle der Site mit der ID 2.

Mittwoch, 25. September 13

Page 5: WPDB -  das unbekannte Objekt

Tabellenwp_commentmeta

wp_comments

wp_links

wp_options

wp_postmeta

wp_posts

wp_terms

wp_term_relationships

wp_term_taxonomy

wp_usermeta

wp_users

Metadaten zu einem Kommentar

Die Kommentare die abgegeben wurden.

Links (z.b. Blogroll) mit Wordpress 3.5 in ein Plugin gewandert. ( http://wordpress.org/plugins/link-manager/ )

Enthält "globale" Einstellungen. Z.B. die Daten aus Verwaltung/Einstellungen.

Metadaten zu Seiten, Beiträgen und CPTs.

Der Inhalt von Seiten, Beiträgen und CPTs.

Kategorien für Beitrage und Links und Tags für Beiträge.

Verknüpfung der Beiträge (Posts) mit Kategorien/Tags (Terms)

Taxonomie (Kategorie, Link, Tag) der Einträge in wp_terms

Metadaten von Benutzern

Benutzer des Systems

Mittwoch, 25. September 13

Page 6: WPDB -  das unbekannte Objekt

Multisite Tabellen

wp_blogs

wp_blog_versions

wp_registration_log

wp_signups

wp_site

wp_sitemeta

Sitedaten. Id, aktiv, wann registriert usw.

Die aktuelle Version der Datenbank der jeweiligen Site.

Protokoll der Adminregistrierung einer neuen Site

Protokoll der Benutzerregistrierungen der Sites

SiteID und URLpfad der einzelnen Sites

Metadaten zu den Sites

Mittwoch, 25. September 13

Page 7: WPDB -  das unbekannte Objekt

Multisite BetriebIm Multisite Betrieb sind folgende Tabellen Sitespezifisch und werden mit jeder neuen Site ein weiteres mal angelegt. Das Namensschema ist Prefix.BlogID_Name. Also z.B. wp_3_post, wp_4_posts usw.

• wp_2_commentmeta• wp_2_comments• wp_2_links• wp_2_options• wp_2_postmeta• wp_2_posts• wp_2_terms• wp_2_term_relationships• wp_2_term_taxonomy

Mittwoch, 25. September 13

Page 8: WPDB -  das unbekannte Objekt

Das WPDB Objekt

Wordpress stellt eine recht umfangreiche Datenbank Klasse zur Verfügung, die man auch in seinen eigenen Themes / Plugins nutzen sollte (auch in snippets in der functions.php wenn mehr als nur einmal verwendet werden soll).

Natürlich kann man es von Hand coden, via mysql_connect/mysql_query.

ABER- Zugangsdaten auslesen oder doppelt haben- Prefix berücksichtigen- Bei Multisite, BlogID berücksichtigen- escapen, Prepared Statements - alles selbst machen

Mittwoch, 25. September 13

Page 9: WPDB -  das unbekannte Objekt

Das WPDB Objekt

Nach der Initialisierung des Wordpress Kerns steht ein globales Objekt $wpdb zur Verfügung. Um es in eigenen Funktionen/Methoden zu nutzen muss es via global bekannt gemacht werden.

<?phpglobal $wpdb;?>

Die Klasse findet sich in /wp-includes/wp-db.php und die Dokumentation im Codex unter http://codex.wordpress.org/Class_Reference/wpdb

Mittwoch, 25. September 13

Page 10: WPDB -  das unbekannte Objekt

Einen Wert auslesen

Mit der get_var() Methode kann man einen einzelnen Wert auslesen.

<?phpglobal $wpdb;$variable = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->users" );?>

Gibt die Anzahl der Benutzer zurück, der korrekte Tabellenname wird ebenfalls von dem WPDB Objekt geholt.

Mittwoch, 25. September 13

Page 11: WPDB -  das unbekannte Objekt

Eine Zeile auslesen

Mit der get_row() Methode kann man einen einzelnen Wert auslesen.

<?phpglobal $wpdb;$variable = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE ID=1" );echo $variable->post_title; // Gibt den Titel aus.?>

Gibt ein Objekt zurück mit den Elementen als Properties. Optional kann es auch als numerisches oder assoziazives Array zurückgegeben werden.

Mittwoch, 25. September 13

Page 12: WPDB -  das unbekannte Objekt

Ergebnis auslesen

Mit der get_results() Methode kann man das Ergebnis der Query auslesen.

<?phpglobal $wpdb;$variable = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE ID=1" );echo $variable->post_title; // Gibt den Titel aus.?>

Gibt ein Objekt zurück mit den Elementen als Properties. Optional kann es auch als numerisches oder assoziazives Array zurückgegeben werden.

Mittwoch, 25. September 13

Page 13: WPDB -  das unbekannte Objekt

Reinschreiben

Mit der insert() Methode kann man Daten in die Datenbank schreibe.

<?phpglobal $wpdb;$wpdb->insert( $wpdb->usermeta, array("user_id" => 1, "meta_key" => "coolness_factor", "meta_value" => 10), array("%d", %s", "%d"));?>

Mittwoch, 25. September 13

Page 14: WPDB -  das unbekannte Objekt

Überschreiben

Mit der update() Methode kann man Daten in der Datenbank ersetzen.

$wpdb->update( $table, $data, $where, $format = null, $where_format = null );

<?phpglobal $wpdb;$wpdb->update( $wpdb->posts, array("post_title" => "Neuer Beitragstitel"), array("ID" => 5), array("%s"), array("%d") );?>

Mit der replace Methode werden Daten ersetzt oder (wenn nicht vorhanden) eingefügt. Die update Methode hingegen liefert einen Fehler wenn der Datensatz nicht vorhanden ist.

Mittwoch, 25. September 13

Page 15: WPDB -  das unbekannte Objekt

Löschen

Mit der delete() Methode kann man Daten in der Datenbank löschen.

$wpdb->delete( $table, $where, $where_format = null );

<?phpglobal $wpdb;$wpdb->delete( $wpdb->posts, array( 'ID' => 1 ), array( '%d' ) );?>

Mittwoch, 25. September 13

Page 16: WPDB -  das unbekannte Objekt

Abfragen schützen

Mit der prepare() Methode kann man seine Abfrage mit Prepared Statements erstellen und so die Sicherheit vor SQL Injections erhöhen.

<?phpglobal $wpdb;$wpdb->query( $wpdb->prepare ( "INSERT INTO $wpdb->postmeta ( post_id, meta_key, meta_value ) VALUES ( %d, %s, %s ) ", 5, $meta_key, $meta_value) );?>

Mittwoch, 25. September 13

Page 17: WPDB -  das unbekannte Objekt

Aber ich hab doch WP_Query

Ich habe doch WP_Query, wozu soll ich mich mit WPDB beschäftigen?

Die WP_Query Klasse wird sehr häufig in Themes verwendet um den "Loop" zu erzeugen, also die Liste der n Beiträge auf einer Seite. WP_Query ist eine weitere, oberhalb von WPDB liegende Abstraktion, welche auf der Posts Tabelle agiert und (unter Berücksichtigung von Tags und Kategorien) Inhalte der Posts Tabelle zurückliefert (also Beitröge, Seiten und Custom Post Types), aber damit hat man keinen Zugriff auf die restlichen Tabellen.

Mittwoch, 25. September 13

Page 18: WPDB -  das unbekannte Objekt

Links

WPDB Class Reference http://codex.wordpress.org/Class_Reference/wpdb

Data Validation in Wordpresshttp://codex.wordpress.org/Data_Validation

Database Description Wordpresshttp://codex.wordpress.org/Database_Description

SQL Injectionhttp://de.wikipedia.org/wiki/SQL-Injection

Prepared Statementhttp://de.wikipedia.org/wiki/Prepared_Statement

WP_Query Codexhttp://codex.wordpress.org/Class_Reference/WP_Query

Mittwoch, 25. September 13

Page 19: WPDB -  das unbekannte Objekt

Ende

Mittwoch, 25. September 13