WPMeetup Hannover, 25.09.2013
Frank Staude <frank@staude.net>
WPDB – das
unbekannte Objekt.
Mittwoch, 25. September 13
Datenbank / Singlesite Installation
• 11 Tabellen
• Benennung: Prefix (Bei der Installation angegeben,
default: wp_ ) + Nam...
Datenbank / Multisite aktiviert
• 17 Tabellen, 6 Tabellen sind durch die Multisite
hinzugekommen.
Mittwoch, 25. September ...
Datenbank / Multisite mit 2 Sites
• 9 Tabellen pro Site, Schema: Prefix.BlogID_Name. Z.B:
wp_2_posts für Posts Tabelle der ...
Tabellen
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_terms
wp_term_relationships
wp_term_taxono...
Multisite Tabellen
wp_blogs
wp_blog_versions
wp_registration_log
wp_signups
wp_site
wp_sitemeta
Sitedaten. Id, aktiv, wann...
Multisite Betrieb
Im Multisite Betrieb sind folgende Tabellen Sitespezifisch und werden mit jeder
neuen Site ein weiteres m...
Das WPDB Objekt
Wordpress stellt eine recht umfangreiche Datenbank Klasse zur Verfügung,
die man auch in seinen eigenen Th...
Das WPDB Objekt
Nach der Initialisierung des Wordpress Kerns steht ein globales Objekt $wpdb
zur Verfügung. Um es in eigen...
Einen Wert auslesen
Mit der get_var() Methode kann man einen einzelnen Wert auslesen.
<?php
global $wpdb;
$variable = $wpd...
Eine Zeile auslesen
Mit der get_row() Methode kann man einen einzelnen Wert auslesen.
<?php
global $wpdb;
$variable = $wpd...
Ergebnis auslesen
Mit der get_results() Methode kann man das Ergebnis der Query auslesen.
<?php
global $wpdb;
$variable = ...
Reinschreiben
Mit der insert() Methode kann man Daten in die Datenbank schreibe.
<?php
global $wpdb;
$wpdb->insert( $wpdb-...
Überschreiben
Mit der update() Methode kann man Daten in der Datenbank ersetzen.
$wpdb->update( $table, $data, $where, $fo...
Löschen
Mit der delete() Methode kann man Daten in der Datenbank löschen.
$wpdb->delete( $table, $where, $where_format = n...
Abfragen schützen
Mit der prepare() Methode kann man seine Abfrage mit Prepared Statements
erstellen und so die Sicherheit...
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...
Links
WPDB Class Reference
http://codex.wordpress.org/Class_Reference/wpdb
Data Validation in Wordpress
http://codex.wordp...
Ende
Mittwoch, 25. September 13
Nächste SlideShare
Wird geladen in …5
×

WPDB - das unbekannte Objekt

1.471 Aufrufe

Veröffentlicht am

0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.471
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
364
Aktionen
Geteilt
0
Downloads
2
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

WPDB - das unbekannte Objekt

  1. 1. WPMeetup Hannover, 25.09.2013 Frank Staude <frank@staude.net> WPDB – das unbekannte Objekt. Mittwoch, 25. September 13
  2. 2. 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
  3. 3. Datenbank / Multisite aktiviert • 17 Tabellen, 6 Tabellen sind durch die Multisite hinzugekommen. Mittwoch, 25. September 13
  4. 4. 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
  5. 5. Tabellen wp_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
  6. 6. 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
  7. 7. Multisite Betrieb Im 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
  8. 8. 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
  9. 9. 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. <?php global $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
  10. 10. Einen Wert auslesen Mit der get_var() Methode kann man einen einzelnen Wert auslesen. <?php global $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
  11. 11. Eine Zeile auslesen Mit der get_row() Methode kann man einen einzelnen Wert auslesen. <?php global $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
  12. 12. Ergebnis auslesen Mit der get_results() Methode kann man das Ergebnis der Query auslesen. <?php global $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
  13. 13. Reinschreiben Mit der insert() Methode kann man Daten in die Datenbank schreibe. <?php global $wpdb; $wpdb->insert( $wpdb->usermeta, array("user_id" => 1, "meta_key" => "coolness_factor", "meta_value" => 10), array("%d", %s", "%d")); ?> Mittwoch, 25. September 13
  14. 14. Überschreiben Mit der update() Methode kann man Daten in der Datenbank ersetzen. $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); <?php global $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
  15. 15. Löschen Mit der delete() Methode kann man Daten in der Datenbank löschen. $wpdb->delete( $table, $where, $where_format = null ); <?php global $wpdb; $wpdb->delete( $wpdb->posts, array( 'ID' => 1 ), array( '%d' ) ); ?> Mittwoch, 25. September 13
  16. 16. Abfragen schützen Mit der prepare() Methode kann man seine Abfrage mit Prepared Statements erstellen und so die Sicherheit vor SQL Injections erhöhen. <?php global $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
  17. 17. 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
  18. 18. Links WPDB Class Reference http://codex.wordpress.org/Class_Reference/wpdb Data Validation in Wordpress http://codex.wordpress.org/Data_Validation Database Description Wordpress http://codex.wordpress.org/Database_Description SQL Injection http://de.wikipedia.org/wiki/SQL-Injection Prepared Statement http://de.wikipedia.org/wiki/Prepared_Statement WP_Query Codex http://codex.wordpress.org/Class_Reference/WP_Query Mittwoch, 25. September 13
  19. 19. Ende Mittwoch, 25. September 13

×