SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
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_ ) + Name. Die Tabelle Posts heisst in einer
default Installation wp_posts
Mittwoch, 25. September 13
Datenbank / Multisite aktiviert
• 17 Tabellen, 6 Tabellen sind durch die Multisite
hinzugekommen.
Mittwoch, 25. September 13
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
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
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
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
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
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
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
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
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
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
Ü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
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
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
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
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
Ende
Mittwoch, 25. September 13

Más contenido relacionado

Destacado

FC Barcelona - Presentació Àrea Econòmica
FC Barcelona - Presentació Àrea EconòmicaFC Barcelona - Presentació Àrea Econòmica
FC Barcelona - Presentació Àrea EconòmicaFC Barcelona
 
DESIGN DE INTERIORES - UNID II HABITAÇÃO 1
DESIGN DE INTERIORES - UNID II HABITAÇÃO 1DESIGN DE INTERIORES - UNID II HABITAÇÃO 1
DESIGN DE INTERIORES - UNID II HABITAÇÃO 1Luciana Santos
 
www.aulasdefisicaapoio.com - Física - Exercício Resolvidos Calorimetria
www.aulasdefisicaapoio.com - Física - Exercício  Resolvidos Calorimetriawww.aulasdefisicaapoio.com - Física - Exercício  Resolvidos Calorimetria
www.aulasdefisicaapoio.com - Física - Exercício Resolvidos CalorimetriaVideoaulas De Física Apoio
 
HISTÓRIA DA ARTE: CRISTÃ PRIMITIVA E ARTE BIZANTINA
HISTÓRIA DA ARTE: CRISTÃ PRIMITIVA E ARTE BIZANTINAHISTÓRIA DA ARTE: CRISTÃ PRIMITIVA E ARTE BIZANTINA
HISTÓRIA DA ARTE: CRISTÃ PRIMITIVA E ARTE BIZANTINACarlos Benjoino Bidu
 
Modelos de otorgamiento de crédito
Modelos de otorgamiento de créditoModelos de otorgamiento de crédito
Modelos de otorgamiento de créditoAIS
 
Enfermería neurológica
Enfermería neurológicaEnfermería neurológica
Enfermería neurológicanAyblancO
 
bbk10: Bilanz von 3 Jahren BlogOffensive
bbk10: Bilanz von 3 Jahren BlogOffensivebbk10: Bilanz von 3 Jahren BlogOffensive
bbk10: Bilanz von 3 Jahren BlogOffensivehc voigt
 
Conferencia Nuevo Codigo Penal Militar
Conferencia Nuevo Codigo Penal MilitarConferencia Nuevo Codigo Penal Militar
Conferencia Nuevo Codigo Penal Militarosalarah
 
Missões jesuíticas
Missões jesuíticasMissões jesuíticas
Missões jesuíticasFelipe Franco
 
Governança Corporativa_Pós Mackenzie
Governança Corporativa_Pós MackenzieGovernança Corporativa_Pós Mackenzie
Governança Corporativa_Pós Mackenzieamandasouzasantos
 
Mod 5 transferencia-de-calor-vs 2013-2014
Mod 5 transferencia-de-calor-vs 2013-2014Mod 5 transferencia-de-calor-vs 2013-2014
Mod 5 transferencia-de-calor-vs 2013-2014Fersay
 
Nachhaltige Entwicklung, Kochen und Management
Nachhaltige Entwicklung,  Kochen und ManagementNachhaltige Entwicklung,  Kochen und Management
Nachhaltige Entwicklung, Kochen und ManagementUlrich Holzbaur
 
Deshidratacion+En+Pediatra.Icasa.
Deshidratacion+En+Pediatra.Icasa.Deshidratacion+En+Pediatra.Icasa.
Deshidratacion+En+Pediatra.Icasa.pediatria
 

Destacado (20)

Museen und das Web 2.0
Museen und das Web 2.0Museen und das Web 2.0
Museen und das Web 2.0
 
FC Barcelona - Presentació Àrea Econòmica
FC Barcelona - Presentació Àrea EconòmicaFC Barcelona - Presentació Àrea Econòmica
FC Barcelona - Presentació Àrea Econòmica
 
DESIGN DE INTERIORES - UNID II HABITAÇÃO 1
DESIGN DE INTERIORES - UNID II HABITAÇÃO 1DESIGN DE INTERIORES - UNID II HABITAÇÃO 1
DESIGN DE INTERIORES - UNID II HABITAÇÃO 1
 
www.aulasdefisicaapoio.com - Física - Exercício Resolvidos Calorimetria
www.aulasdefisicaapoio.com - Física - Exercício  Resolvidos Calorimetriawww.aulasdefisicaapoio.com - Física - Exercício  Resolvidos Calorimetria
www.aulasdefisicaapoio.com - Física - Exercício Resolvidos Calorimetria
 
HISTÓRIA DA ARTE: CRISTÃ PRIMITIVA E ARTE BIZANTINA
HISTÓRIA DA ARTE: CRISTÃ PRIMITIVA E ARTE BIZANTINAHISTÓRIA DA ARTE: CRISTÃ PRIMITIVA E ARTE BIZANTINA
HISTÓRIA DA ARTE: CRISTÃ PRIMITIVA E ARTE BIZANTINA
 
Modelos de otorgamiento de crédito
Modelos de otorgamiento de créditoModelos de otorgamiento de crédito
Modelos de otorgamiento de crédito
 
La carne 2
La carne 2La carne 2
La carne 2
 
Enfermería neurológica
Enfermería neurológicaEnfermería neurológica
Enfermería neurológica
 
Caderno 5º ano
Caderno 5º anoCaderno 5º ano
Caderno 5º ano
 
Apostasia em Israel
Apostasia em IsraelApostasia em Israel
Apostasia em Israel
 
bbk10: Bilanz von 3 Jahren BlogOffensive
bbk10: Bilanz von 3 Jahren BlogOffensivebbk10: Bilanz von 3 Jahren BlogOffensive
bbk10: Bilanz von 3 Jahren BlogOffensive
 
Conferencia Nuevo Codigo Penal Militar
Conferencia Nuevo Codigo Penal MilitarConferencia Nuevo Codigo Penal Militar
Conferencia Nuevo Codigo Penal Militar
 
SCM-Fachtagung Krisenkommunikation
SCM-Fachtagung KrisenkommunikationSCM-Fachtagung Krisenkommunikation
SCM-Fachtagung Krisenkommunikation
 
Missões jesuíticas
Missões jesuíticasMissões jesuíticas
Missões jesuíticas
 
Governança Corporativa_Pós Mackenzie
Governança Corporativa_Pós MackenzieGovernança Corporativa_Pós Mackenzie
Governança Corporativa_Pós Mackenzie
 
Marcapasos
MarcapasosMarcapasos
Marcapasos
 
Mod 5 transferencia-de-calor-vs 2013-2014
Mod 5 transferencia-de-calor-vs 2013-2014Mod 5 transferencia-de-calor-vs 2013-2014
Mod 5 transferencia-de-calor-vs 2013-2014
 
Nachhaltige Entwicklung, Kochen und Management
Nachhaltige Entwicklung,  Kochen und ManagementNachhaltige Entwicklung,  Kochen und Management
Nachhaltige Entwicklung, Kochen und Management
 
Deshidratacion+En+Pediatra.Icasa.
Deshidratacion+En+Pediatra.Icasa.Deshidratacion+En+Pediatra.Icasa.
Deshidratacion+En+Pediatra.Icasa.
 
Obsessão e desobsessão
Obsessão e desobsessãoObsessão e desobsessão
Obsessão e desobsessão
 

Similar a WPDB - das unbekannte Objekt

WordPress - Seiten anteasern. Theorie, Praxis, Plugins
WordPress - Seiten anteasern. Theorie, Praxis, PluginsWordPress - Seiten anteasern. Theorie, Praxis, Plugins
WordPress - Seiten anteasern. Theorie, Praxis, Pluginsfrankstaude
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbaseStefan Frömken
 
Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)Ulrike Schwinn
 
WordPress absichern - WP Camp 2012 in Berlin
WordPress absichern - WP Camp 2012 in BerlinWordPress absichern - WP Camp 2012 in Berlin
WordPress absichern - WP Camp 2012 in BerlinTorsten Landsiedel
 
IPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedIPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedRalf Eggert
 
WordPress Plugins und Themes übersetzbar machen - WP Camp 2012 Berlin
WordPress Plugins und Themes übersetzbar machen - WP Camp 2012 BerlinWordPress Plugins und Themes übersetzbar machen - WP Camp 2012 Berlin
WordPress Plugins und Themes übersetzbar machen - WP Camp 2012 BerlinDavid Decker
 
Einführung in SASS und Compass
Einführung in SASS und CompassEinführung in SASS und Compass
Einführung in SASS und Compasseigentor
 
DB Optimierung - WordPress beschleunigen
DB Optimierung - WordPress beschleunigenDB Optimierung - WordPress beschleunigen
DB Optimierung - WordPress beschleunigenSelbständiger Berater
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungFrank Schmittlein
 
WP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für WordpressWP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für Wordpressfrankstaude
 
Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Sebastian Adler
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...VCAT Consulting GmbH
 
Rex Linuxtag 2012
Rex Linuxtag 2012Rex Linuxtag 2012
Rex Linuxtag 2012inovex GmbH
 
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsFMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsVerein FM Konferenz
 
Drupal 8: TWIG Template Engine
Drupal 8:  TWIG Template EngineDrupal 8:  TWIG Template Engine
Drupal 8: TWIG Template Enginedrubb
 

Similar a WPDB - das unbekannte Objekt (20)

WordPress - Seiten anteasern. Theorie, Praxis, Plugins
WordPress - Seiten anteasern. Theorie, Praxis, PluginsWordPress - Seiten anteasern. Theorie, Praxis, Plugins
WordPress - Seiten anteasern. Theorie, Praxis, Plugins
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
 
Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)
 
Einführung in Puppet
Einführung in PuppetEinführung in Puppet
Einführung in Puppet
 
WordPress absichern - WP Camp 2012 in Berlin
WordPress absichern - WP Camp 2012 in BerlinWordPress absichern - WP Camp 2012 in Berlin
WordPress absichern - WP Camp 2012 in Berlin
 
IPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedIPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 Reloaded
 
WordPress Plugins und Themes übersetzbar machen - WP Camp 2012 Berlin
WordPress Plugins und Themes übersetzbar machen - WP Camp 2012 BerlinWordPress Plugins und Themes übersetzbar machen - WP Camp 2012 Berlin
WordPress Plugins und Themes übersetzbar machen - WP Camp 2012 Berlin
 
Einführung in SASS und Compass
Einführung in SASS und CompassEinführung in SASS und Compass
Einführung in SASS und Compass
 
DB Optimierung - WordPress beschleunigen
DB Optimierung - WordPress beschleunigenDB Optimierung - WordPress beschleunigen
DB Optimierung - WordPress beschleunigen
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
 
WP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für WordpressWP-CLI - Das Kommandozeilen Interface für Wordpress
WP-CLI - Das Kommandozeilen Interface für Wordpress
 
Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)Einstieg in Xpath für SEO (Campixx2021)
Einstieg in Xpath für SEO (Campixx2021)
 
T3ak12 extbase
T3ak12 extbaseT3ak12 extbase
T3ak12 extbase
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...
VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend...
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
Rex Linuxtag 2012
Rex Linuxtag 2012Rex Linuxtag 2012
Rex Linuxtag 2012
 
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsFMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
 
Backbase Intro
Backbase IntroBackbase Intro
Backbase Intro
 
Drupal 8: TWIG Template Engine
Drupal 8:  TWIG Template EngineDrupal 8:  TWIG Template Engine
Drupal 8: TWIG Template Engine
 

Más de frankstaude

State of TV – Vortragsaufzeichnung, aktueller Stand und Ausblick
State of TV – Vortragsaufzeichnung, aktueller Stand und AusblickState of TV – Vortragsaufzeichnung, aktueller Stand und Ausblick
State of TV – Vortragsaufzeichnung, aktueller Stand und Ausblickfrankstaude
 
Automatisierung in Zeiten von Social Media, Messenger-Diensten und Bots
Automatisierung in Zeiten von Social Media, Messenger-Diensten und BotsAutomatisierung in Zeiten von Social Media, Messenger-Diensten und Bots
Automatisierung in Zeiten von Social Media, Messenger-Diensten und Botsfrankstaude
 
CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?
CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?
CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?frankstaude
 
TablePress - Warum und welche Erweiterungen gibt es?
TablePress - Warum und welche Erweiterungen gibt es?TablePress - Warum und welche Erweiterungen gibt es?
TablePress - Warum und welche Erweiterungen gibt es?frankstaude
 
Gamifizierung mit WordPress – Eine Einführung und Einsatz in der Schule
Gamifizierung mit WordPress – Eine Einführung und Einsatz in der SchuleGamifizierung mit WordPress – Eine Einführung und Einsatz in der Schule
Gamifizierung mit WordPress – Eine Einführung und Einsatz in der Schulefrankstaude
 
Erneute Bestellung in WooCommerce
Erneute Bestellung in WooCommerceErneute Bestellung in WooCommerce
Erneute Bestellung in WooCommercefrankstaude
 
Gamification mit WordPress
Gamification mit WordPressGamification mit WordPress
Gamification mit WordPressfrankstaude
 
Mobile Apps mit WordPress
Mobile Apps mit WordPressMobile Apps mit WordPress
Mobile Apps mit WordPressfrankstaude
 
Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?frankstaude
 
State of TV - Stand der Vortragsaufzeichnung 11/2017
State of TV - Stand der Vortragsaufzeichnung 11/2017State of TV - Stand der Vortragsaufzeichnung 11/2017
State of TV - Stand der Vortragsaufzeichnung 11/2017frankstaude
 
Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?frankstaude
 
Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?frankstaude
 
Themes – Wieso, Weshalb, Warum!?
Themes – Wieso, Weshalb, Warum!?Themes – Wieso, Weshalb, Warum!?
Themes – Wieso, Weshalb, Warum!?frankstaude
 
Eine WordPress Meetup Webseite auf Autopilot
Eine WordPress Meetup Webseite auf AutopilotEine WordPress Meetup Webseite auf Autopilot
Eine WordPress Meetup Webseite auf Autopilotfrankstaude
 
Vorträge aufzeichnen ohne Nachbearbeitung
Vorträge aufzeichnen ohne NachbearbeitungVorträge aufzeichnen ohne Nachbearbeitung
Vorträge aufzeichnen ohne Nachbearbeitungfrankstaude
 
Nürnberg WordPress Meetup - Custom Post Types mit PODS.io
Nürnberg WordPress Meetup - Custom Post Types mit PODS.ioNürnberg WordPress Meetup - Custom Post Types mit PODS.io
Nürnberg WordPress Meetup - Custom Post Types mit PODS.iofrankstaude
 
WordPress - eigene Plugins erstellen
WordPress - eigene Plugins erstellenWordPress - eigene Plugins erstellen
WordPress - eigene Plugins erstellenfrankstaude
 
Custom Post Types mit PODS.io
Custom Post Types mit PODS.ioCustom Post Types mit PODS.io
Custom Post Types mit PODS.iofrankstaude
 
Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?frankstaude
 

Más de frankstaude (20)

State of TV – Vortragsaufzeichnung, aktueller Stand und Ausblick
State of TV – Vortragsaufzeichnung, aktueller Stand und AusblickState of TV – Vortragsaufzeichnung, aktueller Stand und Ausblick
State of TV – Vortragsaufzeichnung, aktueller Stand und Ausblick
 
Automatisierung in Zeiten von Social Media, Messenger-Diensten und Bots
Automatisierung in Zeiten von Social Media, Messenger-Diensten und BotsAutomatisierung in Zeiten von Social Media, Messenger-Diensten und Bots
Automatisierung in Zeiten von Social Media, Messenger-Diensten und Bots
 
CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?
CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?
CPT UI und ACF - Wie werden Inhalte sinnvoll strukturiert?
 
TablePress - Warum und welche Erweiterungen gibt es?
TablePress - Warum und welche Erweiterungen gibt es?TablePress - Warum und welche Erweiterungen gibt es?
TablePress - Warum und welche Erweiterungen gibt es?
 
Gamifizierung mit WordPress – Eine Einführung und Einsatz in der Schule
Gamifizierung mit WordPress – Eine Einführung und Einsatz in der SchuleGamifizierung mit WordPress – Eine Einführung und Einsatz in der Schule
Gamifizierung mit WordPress – Eine Einführung und Einsatz in der Schule
 
Erneute Bestellung in WooCommerce
Erneute Bestellung in WooCommerceErneute Bestellung in WooCommerce
Erneute Bestellung in WooCommerce
 
Gamification mit WordPress
Gamification mit WordPressGamification mit WordPress
Gamification mit WordPress
 
Mobile Apps mit WordPress
Mobile Apps mit WordPressMobile Apps mit WordPress
Mobile Apps mit WordPress
 
Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?
 
State of TV - Stand der Vortragsaufzeichnung 11/2017
State of TV - Stand der Vortragsaufzeichnung 11/2017State of TV - Stand der Vortragsaufzeichnung 11/2017
State of TV - Stand der Vortragsaufzeichnung 11/2017
 
Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?Suchst du noch - Oder findest du schon?
Suchst du noch - Oder findest du schon?
 
Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?
 
Themes – Wieso, Weshalb, Warum!?
Themes – Wieso, Weshalb, Warum!?Themes – Wieso, Weshalb, Warum!?
Themes – Wieso, Weshalb, Warum!?
 
Eine WordPress Meetup Webseite auf Autopilot
Eine WordPress Meetup Webseite auf AutopilotEine WordPress Meetup Webseite auf Autopilot
Eine WordPress Meetup Webseite auf Autopilot
 
Vorträge aufzeichnen ohne Nachbearbeitung
Vorträge aufzeichnen ohne NachbearbeitungVorträge aufzeichnen ohne Nachbearbeitung
Vorträge aufzeichnen ohne Nachbearbeitung
 
Nürnberg WordPress Meetup - Custom Post Types mit PODS.io
Nürnberg WordPress Meetup - Custom Post Types mit PODS.ioNürnberg WordPress Meetup - Custom Post Types mit PODS.io
Nürnberg WordPress Meetup - Custom Post Types mit PODS.io
 
WordPress - eigene Plugins erstellen
WordPress - eigene Plugins erstellenWordPress - eigene Plugins erstellen
WordPress - eigene Plugins erstellen
 
Custom Post Types mit PODS.io
Custom Post Types mit PODS.ioCustom Post Types mit PODS.io
Custom Post Types mit PODS.io
 
Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?Suchst du noch? Oder findest du schon?
Suchst du noch? Oder findest du schon?
 
Pressmatic
PressmaticPressmatic
Pressmatic
 

WPDB - das unbekannte Objekt

  • 1. WPMeetup Hannover, 25.09.2013 Frank Staude <frank@staude.net> WPDB – das unbekannte Objekt. Mittwoch, 25. September 13
  • 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. Datenbank / Multisite aktiviert • 17 Tabellen, 6 Tabellen sind durch die Multisite hinzugekommen. Mittwoch, 25. September 13
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Ü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. 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. 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. 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. 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