{"id":60,"date":"2017-02-10T04:25:15","date_gmt":"2017-02-10T03:25:15","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=60"},"modified":"2017-02-10T04:27:51","modified_gmt":"2017-02-10T03:27:51","slug":"alle-alten-programmierer-lieben-listen-die-erste-datenbankausgabe","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2017\/02\/10\/alle-alten-programmierer-lieben-listen-die-erste-datenbankausgabe\/","title":{"rendered":"Alle alten Programmierer lieben Listen &#8211; die erste Datenbankausgabe"},"content":{"rendered":"<h2>Voraussetzungen<\/h2>\n<p>Ich gehe mal davon aus, da\u00df sie grunds\u00e4tzlich wissen wie man in PHP ein SQL Statement zusammenbaut und wie man daraus eine HTML-Ausgabe erzeugt . Ich werde mich n\u00e4mlich nicht mit Step-by-Step Details aufhalten, schlie\u00dflich wollen wir ja Ergebnisse sehen. Daf\u00fcr w\u00e4re es sehr n\u00fctzlich, wenn sie in ihrem Testblog auch richtig sch\u00f6n viele Beitr\u00e4ge h\u00e4tten, und auch ein paar Seiten und jede Menge Bilder. Notfalls hacken sie halt so fuffzehn, zwanzig Beitr\u00e4ge ein und schieben ein paar Urlaubsfotos dazu, das geht dann schon f\u00fcr den Anfang. Ich greife f\u00fcr Demozwecke immer gern auf meine Kochrezepte im <a href=\"http:\/\/evileu.de\/inselfisch-kochbuch\/\">Inselfisch-Kochbuch<\/a> zur\u00fcck, das sind \u00fcber 200 Beitr\u00e4ge mit etlichen Bildern, da kann man sch\u00f6n spielen \ud83d\ude42<\/p>\n<h2>Was wir nicht brauchen<\/h2>\n<p>Ein &#8222;new pdo&#8220; und den Connect auf die Datenbank. WordPress ist ja schon mit der Datenbank verbunden, da brauchen wir uns nicht weiter um die Verbindungsdetails zu k\u00fcmmern. Auch eine Fehlerbehandlung f\u00fcr den Fall da\u00df der Connect nicht hinhaut kann ausfallen, denn wenn das der Fall sein sollte wird ihnen WordPress schon melden, da\u00df was faul ist. Dann haben sie n\u00e4mlich ein gr\u00f6\u00dferes Problem, das jetzt mit unserem PHP-Progr\u00e4mmchen eher weniger zu tun hat.<\/p>\n<p>Aber ich schweife ab, ran an die Buletten, PHP Snippet editieren, jetzt wirds ernst&#8230;. ach, ich verga\u00df. Darf ich zun\u00e4chst mal vorstellen&#8230;<\/p>\n<h2>Was wir unbedingt brauchen: das $wpdb-Objekt<\/h2>\n<p>Um die WordPress-Datenbankverbindung ohne weiteres nutzen zu k\u00f6nnen, m\u00fcssen wir dem System mitteilen, da\u00df wir gedenken jetzt \u00fcber die WordPress-eigene Schnittstelle mit der Datenbank zu kommunizierren. Das h\u00f6rt sich tricky an, ist aber in der Realit\u00e4t ganz einfach. Daf\u00fcr gen\u00fcgt ein einziges Statement:<\/p>\n<pre>global $wpdb;<\/pre>\n<p>Damit wird eine Objektvariable der Klasse wpdb als Globalvariable deklariert, und damit k\u00f6nnen wir ihre Methoden zum Datenbankzugriff in unserem Codesnippet nutzen.<\/p>\n<h2>Ein einfaches Beispiel<\/h2>\n<pre> \r\nglobal $wpdb;\r\n$alleposts = $wpdb-&gt;get_results( \"SELECT * from wp_posts where post_status = 'publish' and post_type = 'post'\");\r\n<\/pre>\n<ul>\n<li>Der SELECT ist ganz simpel, die Syntax in MySQL ist genau so wie wir sie gewohnt sind.<\/li>\n<li>$alleposts ist einfach eine PHP-Variable, die als Auffangbeh\u00e4lter f\u00fcr das Ergebnis unseres SQL-Statements dient.<\/li>\n<li>$wpdb-&gt;get_results ist die Methode, mit der wir unseren SELECT auf die Datenbank loslassen<\/li>\n<\/ul>\n<p>Und das Ergebnis? PHP-Programmierer werden es erraten, mit einem &#8222;echo $alleposts;&#8220; erziehlen wir die lapidare Ausgabe &#8222;Array&#8220;.<\/p>\n<p>Ja, Kunstst\u00fcck! \ud83d\ude42 Die Methode get_results liefert das Ergebnis der SQL-Abfrage, und das sind nunmal im Zweifelsfall mehrere Zeilen.\u00a0 Die stecken in einem Array, und das l\u00e4\u00dft sich sehr praktisch zeilenweise ausgeben, n\u00e4mlich z.B.\u00a0 so:<br \/>\n<code> foreach ( $alleposts as $einpost ) {<br \/>\necho $einpost-&gt;ID;<br \/>\necho $einpost-&gt;post_status;<br \/>\necho $einpost-&gt;post_type;<br \/>\necho $einpost-&gt;post_title;<\/code><\/p>\n<p>}<\/p>\n<p>Der foreach durchl\u00e4uft einfach alle Zeilen des Arrays, das das Ergebnis unserer SQL-Abfrage enth\u00e4lt, und legt den Inhalt der Zeile in die Variable $einpost. Um nun an die einzelnen Datenfelder der aktuellen Zeile heranzukommen, benutzt man schlicht die Feldnamen der Tabelle. Da wir einen Select* verwendet haben k\u00f6nnte man hier nat\u00fcrlich auch noch wesentlich mehr Felder ausgeben, $einpost-&gt;post_author etwa, oder auch $einpost-&gt;post_content, aber das wird f\u00fcr den Anfang zu un\u00fcbersichtlich. So, jetzt nochmal im Ganzen, damit der Zusammenhang noch klarer wird:<\/p>\n<pre><code>global $wpdb;<\/code>\r\n$alleposts = $wpdb-&gt;get_results( \"SELECT * from wp_posts where post_status = 'publish' and post_type = 'post'\");\r\n\r\nforeach ( $alleposts as $einpost ) {\r\n echo $einpost-&gt;ID;\r\n echo $einpost-&gt;post_status;\r\n echo $einpost-&gt;post_type;\r\n echo $einpost-&gt;post_title.\"&lt;br&gt;\";\r\n}<\/pre>\n<p>Und, wie siehts aus? Nicht sch\u00f6n, ich gebs zu, aber die Sache hat Potential, m\u00fcssen sie doch zugeben!<\/p>\n<div id=\"attachment_139\" style=\"width: 222px\" class=\"wp-caption alignnone\"><img aria-describedby=\"caption-attachment-139\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-139\" src=\"http:\/\/evileu.de\/systemberatung\/wp-content\/uploads\/2017\/02\/alle_beitraege_unformatiert-212x300.jpg\" alt=\"alle_beitraege_unformatiert\" width=\"212\" height=\"300\" \/><p id=\"caption-attachment-139\" class=\"wp-caption-text\">alle_beitraege_unformatiert<\/p><\/div>\n<p>H\u00f6r ich da bei den alten Hasen die Zahnr\u00e4dchen klingeln und rattern?\u00a0 Liste aller Beitr\u00e4ge, mit ID und Titel, und da k\u00f6nnte man ja noch andere Felder mit dazunehmen und alphabetisch oder sonstwie sortieren&#8230; haargenau! Alles was die Liste noch braucht ist ein bi\u00dfchen HTML-Zuckergu\u00df, aber darum k\u00fcmmern wir uns morgen. Nehmen sie ruhig mal das $wpdb-Objekt mit in den Feierabend, das wird n\u00e4mlich unser bester Freund!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voraussetzungen Ich gehe mal davon aus, da\u00df sie grunds\u00e4tzlich wissen wie man in PHP ein SQL Statement zusammenbaut und wie man daraus eine HTML-Ausgabe erzeugt . Ich werde mich n\u00e4mlich nicht mit Step-by-Step Details aufhalten, schlie\u00dflich wollen wir ja Ergebnisse sehen. Daf\u00fcr w\u00e4re es sehr n\u00fctzlich, wenn sie in ihrem Testblog auch richtig sch\u00f6n viele [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/60"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=60"}],"version-history":[{"count":1,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/60\/revisions"}],"predecessor-version":[{"id":62,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/60\/revisions\/62"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=60"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=60"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}