Kann man mit PDO Klassen-Arrays aus der Database fetchen – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Kann man mit PDO Klassen-Arrays aus der Database fetchen Tue, 10 Jul 18 18:45:52 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726365#m1726365 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726365#m1726365 <p>moin community,</p> <p>ich wurde durch einen Thread drauf hingewiesen, dass man auch Klassen als <strong>return type</strong> aus einer Datenbank in <em>PDO</em> fetchen kann. Ich habe bisjetzt nur gefetchte <em>primitive</em> Datentypen in Klassen gesehen aber keine <strong>arrays</strong>. Aber ich möchte aus der Datenbank ein Klassenbasiertes Array herausgezogen bekommen wie <code>$foobar->tok[]</code>. Ist das möglich oder muss ich mir mit <code>PDO:FETCH_ASSOC</code> ein <strong>array</strong> in eine Klasse basteln?</p> <p>lgmb</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Tue, 10 Jul 18 19:01:28 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726368#m1726368 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726368#m1726368 <p>Tach!</p> <blockquote> <p>ich wurde durch einen Thread drauf hingewiesen, dass man auch Klassen als <strong>return type</strong> aus einer Datenbank in <em>PDO</em> fetchen kann.</p> </blockquote> <p>Ach ja? Kann man aber nicht. Klassen sind Baupläne. Um konkret Daten transportieren zu können, braucht man Objekte. Objekte sind Instanzen von Klassen.</p> <blockquote> <p>Ich habe bisjetzt nur gefetchte <em>primitive</em> Datentypen in Klassen gesehen aber keine <strong>arrays</strong>.</p> </blockquote> <p>Weil es nicht geht. Es gibt keinen Datentyp Array in beispielsweise MySQL. Wozu auch? Es gibt ja Tabellen für die Massenhaltung von Daten.</p> <blockquote> <p>Aber ich möchte aus der Datenbank ein Klassenbasiertes Array herausgezogen bekommen wie <code>$foobar->tok[]</code>. Ist das möglich oder muss ich mir mit <code>PDO:FETCH_ASSOC</code> ein <strong>array</strong> in eine Klasse basteln?</p> </blockquote> <p>Keine Ahnung, was du konkret möchtest, aber Arrays aus Datenbankabfrageergebnissen musst du selbst erstellen.</p> <p>dedlfix.</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Tue, 10 Jul 18 20:48:29 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726376#m1726376 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726376#m1726376 <p>Hallo MB,</p> <p>wenn dein Datenmodell so aussieht, dass Du irgendein Dingsbums 0-n mal hast, dann gehört es in der DB "untereinander", nicht "nebeneinander". Also auf Rows verteilt, nicht auf Columns. Das nennt man das Einhalten von Normalformen im relationalen Modell.</p> <p>Wenn Du nun eine Objektklasse hast, die nur ein Attribut als Array hat, dann ist das in der DB natürlich lästig. Um das zu normalisieren, brauchst Du eine weitere Tabelle. Und wenn Du es als JOIN liest, liest Du eine Menge redundanter Daten; deshalb fällt dafür eine weitere Query an. Das KANNST Du ggf. optimieren, indem Du über eine Stored Procedure liest die mehrere Rowsets liefert; keine Ahnung ob MySQL das kann.</p> <p>Solche Extratabellen nur wegen eines n-fach Attributs sind ärgerlich. Aber man sollte sich nicht verleiten lassen, sie "weg zu optimieren". Man könnte ja das PHP Array vor dem Speichern in der DB in eine kommaseparierte Liste umwandeln und die in einem langen String speichern. Klar. Geht. Das ist dann eine vorsätzliche Denormalisierung und es ist deine Entscheidung, alle Nachteile davon in Kauf zu nehmen. Eine Lieferung des Attributs als PHP-Array bekommst Du aber auch damit nicht.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Kann man mit PDO Klassen-Arrays aus der Database fetchen Wed, 11 Jul 18 06:23:16 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726385#m1726385 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726385#m1726385 <p>moin community,</p> <blockquote> <p>ich wurde durch einen Thread drauf hingewiesen, dass man auch Klassen als <strong>return type</strong> aus einer Datenbank in <em>PDO</em> fetchen kann.</p> </blockquote> <p>Wo hast Du das gelesen?</p> <blockquote> <p>Ich habe bisjetzt nur gefetchte <em>primitive</em> Datentypen in Klassen gesehen aber keine <strong>arrays</strong>.</p> </blockquote> <p><a href="http://php.net/manual/de/pdostatement.fetchall.php" rel="noopener noreferrer">PDOStatement::fetchAll()</a> returns an array containing all of the remaining rows in the result set.</p> <p>Also kriegst Du somit ein Array.</p> <blockquote> <p>Aber ich möchte aus der Datenbank ein Klassenbasiertes Array herausgezogen bekommen</p> </blockquote> <p>Was verstehst Du denn unter <code>Klassenbasiertes Array</code> ?</p> <p>MfG</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Tue, 10 Jul 18 20:53:53 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726377#m1726377 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726377#m1726377 <p>nabend dedlfix,</p> <blockquote> <blockquote> <p>ich wurde durch einen Thread drauf hingewiesen, dass man auch Klassen als <strong>return type</strong> aus einer Datenbank in <em>PDO</em> fetchen kann.</p> </blockquote> <p>Ach ja? Kann man aber nicht. Klassen sind Baupläne. Um konkret Daten transportieren zu können, braucht man Objekte. Objekte sind Instanzen von Klassen.</p> </blockquote> <p>ich weis. Sry, wenn ich es anders rübergebracht habe</p> <blockquote> <blockquote> <p>Ich habe bisjetzt nur gefetchte <em>primitive</em> Datentypen in Klassen gesehen aber keine <strong>arrays</strong>.</p> </blockquote> <p>Weil es nicht geht. Es gibt keinen Datentyp <em>Array</em> in beispielsweise <em>MySQL</em>. Wozu auch? Es gibt ja Tabellen für die Massenhaltung von Daten.</p> </blockquote> <p>also ich habe in <em>ERM</em> z.B. in der 3. Normalform durch <em>SQL</em> gedacht wie so etwas gehen würde. Ich weis aber nicht, obs dazu ne <em>function</em> gibt. Daher die Frage. Ich kann mir auch selbst was zusammen friemeln.</p> <blockquote> <blockquote> <p>Aber ich möchte aus der Datenbank ein Klassenbasiertes Array herausgezogen bekommen wie <code>$foobar->tok[]</code>. Ist das möglich oder muss ich mir mit <code>PDO:FETCH_ASSOC</code> ein <strong>array</strong> in eine Klasse basteln?</p> </blockquote> <p>Keine Ahnung, was du konkret möchtest, aber Arrays aus Datenbankabfrageergebnissen musst du selbst erstellen.</p> </blockquote> <p>Danke Dir. Werds machen.</p> <p>lgmb</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Tue, 10 Jul 18 21:06:57 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726380#m1726380 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726380#m1726380 <p>nabend RolfB,</p> <blockquote> <p>wenn dein Datenmodell so aussieht, dass Du irgendein Dingsbums 0-n mal hast, dann gehört es in der DB "untereinander", nicht "nebeneinander". Also auf Rows verteilt, nicht auf Columns. Das nennt man das Einhalten von Normalformen im relationalen Modell.</p> </blockquote> <p>habe ich zu dedlfix oben erwähnt</p> <blockquote> <p>Wenn Du nun eine Objektklasse hast, die nur ein Attribut als Array hat, dann ist das in der DB natürlich lästig. Um das zu normalisieren, brauchst Du eine weitere Tabelle. Und wenn Du es als JOIN liest, liest Du eine Menge redundanter Daten; deshalb fällt dafür eine weitere Query an.</p> </blockquote> <p>ja ist mir auch klar geworden . Daher frage ich Fachmänner .</p> <blockquote> <p>Solche Extratabellen nur wegen eines n-fach Attributs sind ärgerlich. Aber man sollte sich nicht verleiten lassen, sie "weg zu optimieren".</p> </blockquote> <p>Ok werde ich beherzigen! Danke.</p> <blockquote> <p>Man könnte ja das PHP Array vor dem Speichern in der DB in eine kommaseparierte Liste umwandeln und die in einem langen String speichern.</p> </blockquote> <p>klingt gut und wäre auch meine idee gewesen hätte ich auch gemacht wenn kein assoziatives array entstehen würde. Ich brauch ja einen anderen zugriff aufs Array: <code>foo;fu;fuz;bar;baz;</code> wenn ich das in nen array umwandeln will muss ich das obligatorisch mit nem numerischen array machen: <code>$arr[ 0 ] = 'foo'</code>. Ich brauch aber zwei werte die referenzieren <em>n</em>-mal. Klar irgendwie würde ich das bestimmt hin bekommen aber ich nehme den Rat den du mir unterbreitet an.</p> <p>danke dafür.</p> <p>lgmb</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Wed, 11 Jul 18 11:56:13 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726397#m1726397 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726397#m1726397 <blockquote> <p>wenn dein Datenmodell so aussieht, dass Du irgendein Dingsbums 0-n mal hast, dann gehört es in der DB "untereinander", nicht "nebeneinander". Also auf Rows verteilt, nicht auf Columns. Das nennt man das Einhalten von Normalformen im relationalen Modell.</p> </blockquote> <p>Mag so sein und seine Richtigkeit haben. Aber:</p> <ul> <li><strong>ENUM</strong> 1 oder 2 Bytes ('val1', 'val2', ...) Liste von Werten (val1, val2, ...). 65.535 eineindeutige Elemente sind maximal möglich.</li> <li><strong>SET</strong> x Bytes ('val1', 'val2', ...) String-Objekt mit verschiedenen Variablen. 64 sind maximal möglich. Speicherbedarf: x ist 1, 2, 3, 4 oder 8.</li> </ul> <p>Und wenn es das gibt, dann sollte man das auch auswerten können. Allerdings "befürchte" ich, dass hier seitens PDO Strings und nicht Arrays zurückgeliefert werden.</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Wed, 11 Jul 18 11:40:51 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726396#m1726396 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726396#m1726396 <p>Hallo MB,</p> <blockquote> <p>Ich brauch aber zwei werte die referenzieren n-mal.</p> </blockquote> <p>Hab ich nicht kapiert, aber wenn Du geholfen bist, dann ist's ja gut </p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Kann man mit PDO Klassen-Arrays aus der Database fetchen Wed, 11 Jul 18 21:09:20 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726414#m1726414 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726414#m1726414 <p>moin pl,</p> <blockquote> <blockquote> <p>ich wurde durch einen Thread drauf hingewiesen, dass man auch Klassen als <strong>return type</strong> aus einer Datenbank in <em>PDO</em> fetchen kann.</p> </blockquote> <p>Wo hast Du das gelesen?</p> </blockquote> <p>Hier: <a href="https://forum.selfhtml.org/self/2018/jul/7/zugriff-auf-stdclass/1726155#m1726155" rel="noopener noreferrer">zugriff auf stdClass</a></p> <blockquote> <blockquote> <p>Aber ich möchte aus der Datenbank ein Klassenbasiertes Array herausgezogen bekommen</p> </blockquote> <p>Was verstehst Du denn unter <code>Klassenbasiertes Array</code> ?</p> </blockquote> <p>Ich vermute von mir ein Neologismus und ich hoffe es ist verständlich geworden. Ein Beispiel hoffe ich klär dies:</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Foobar</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token variable">$baz</span><span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token variable">$tok</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Ich hoffte aus der <em>DB</em> eine definierte Klasse zu extrahieren aber ich wurde eines besseren belert.</p> <p>lgmb</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Wed, 11 Jul 18 12:04:39 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726398#m1726398 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726398#m1726398 <p>Tach!</p> <blockquote> <blockquote> <p>wenn dein Datenmodell so aussieht, dass Du irgendein Dingsbums 0-n mal hast, dann gehört es in der DB "untereinander", nicht "nebeneinander". Also auf Rows verteilt, nicht auf Columns. Das nennt man das Einhalten von Normalformen im relationalen Modell.</p> </blockquote> <p>Mag so sein und seine Richtigkeit haben. Aber:</p> <ul> <li><strong>ENUM</strong> 1 oder 2 Bytes ('val1', 'val2', ...) Liste von Werten (val1, val2, ...). 65.535 eineindeutige Elemente sind maximal möglich.</li> </ul> </blockquote> <p>Ein Enum-Feld enthält exakt einen Wert, ist also skalar / primitiv.</p> <blockquote> <ul> <li><strong>SET</strong> x Bytes ('val1', 'val2', ...) String-Objekt mit verschiedenen Variablen. 64 sind maximal möglich. Speicherbedarf: x ist 1, 2, 3, 4 oder 8.</li> </ul> <p>Und wenn es das gibt, dann sollte man das auch auswerten können. Allerdings "befürchte" ich, dass hier seitens PDO Strings und nicht Arrays zurückgeliefert werden.</p> </blockquote> <p>Schon seitens MySQL kommt hier ein kommaseparierter String bei einer Abfrage als Ergebnis. Zudem sind beide Typen nicht umsonst im Abschnitt String-Typen des MySQL-Handbuchs aufgeführt.</p> <p>dedlfix.</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Wed, 11 Jul 18 13:28:15 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726401#m1726401 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726401#m1726401 <p>Hallo Regina,</p> <p>ein auf 2 Byte gestützter Enum kann 65536 aufgezählte Werte repräsentieren, von denen aber nur einer gleichzeitig aktiv ist. Das ist also kein 1:n. Verwendest Du ein Enum als Flag-Leiste, sind es 16 Werte (Flag-Bits). Die Du beim Tabellendesign festlegen musst; du kannst nicht irgendwann sagen, dass Bit 4 für "Regina" stehen soll, während es anfangs für "Fastix" stand.</p> <p>Ein SET ist, wenn ich das richtig verstanden habe, das gleiche in Grün und mit größeren Integers als Speicher-Repräsentation, nur dass MYSQL hier die Decodierung in eine String-Liste übernimmt. Welche Werte im Set möglich sind, legst Du ebenso bei der Tabellendefinition fest.</p> <p>Hat alles seine Existenzberechtigung. Ob es für den OP passt, ist dann zu prüfen. Ob man effizient alle Rows finden kann, in denen ein Enum das 4. Bit gesetzt hat, oder in denen ein Set einen bestimmten Eintrag enthält, weiß ich nicht. Angesichts der Speicherung als Bitmap würde das für mich einen Full Index- oder Table-Scan erfordern.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Kann man mit PDO Klassen-Arrays aus der Database fetchen Wed, 11 Jul 18 13:47:10 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726406#m1726406 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726406#m1726406 <p>Tach!</p> <blockquote> <p>ein auf 2 Byte gestützter Enum kann 65536 aufgezählte Werte repräsentieren, von denen aber nur einer gleichzeitig aktiv ist. Das ist also kein 1:n. Verwendest Du ein Enum als Flag-Leiste, sind es 16 Werte (Flag-Bits).</p> </blockquote> <p>Enum ist ein String-Typ. Konkret gesagt kann der genau einen Wert von einer vordefinierten Liste repräsentieren. Die interne Speicherung als Byte oder ähnliches, hat keine weitere Bedeutung für den Verwender. Man kann da nicht auf Bits zugreifen. Man liest und schreibt einen Wert aus der Liste als String.</p> <blockquote> <p>Die Du beim Tabellendesign festlegen musst; du kannst nicht irgendwann sagen, dass Bit 4 für "Regina" stehen soll, während es anfangs für "Fastix" stand.</p> </blockquote> <p>Also, man kann Einträgen der Liste einen anderen Wert geben, aber wenn Datensätze diesen Wert hatten, wird der dabei zum Defaultwert geändert.</p> <blockquote> <p>Ein SET ist, wenn ich das richtig verstanden habe, das gleiche in Grün</p> </blockquote> <p>Nö, ein Set ist sozusagen eine Kombination aus Bit-Positionen. Da braucht man etwas mehr Platz, weil jeder Wert durch eine einzelne Bitposition repräsentiert wird. Der ENUM kann 256 Werte in einem Bye darstellen, das SET nur 8, die aber in beliebigen Kombinationen.</p> <blockquote> <p>Ob man effizient alle Rows finden kann, in denen ein Enum das 4. Bit gesetzt hat, oder in denen ein Set einen bestimmten Eintrag enthält, weiß ich nicht. Angesichts der Speicherung als Bitmap würde das für mich einen Full Index- oder Table-Scan erfordern.</p> </blockquote> <p>Man kann sowieso nicht über Bits oder Bytes auf ENUM oder SET zugreifen.</p> <p>dedlfix.</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Thu, 12 Jul 18 08:42:46 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726433#m1726433 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726433#m1726433 <p>Hallo dedlfix,</p> <p>ok, hätte wohl besser erstmal die Doku gelesen.</p> <p>Dann ist das SET die Bitmap (Flags-Enum) und ENUM die reine Aufzählung. Jedenfalls beide nicht oder nur in Ausnahmefällen geeignet, um eine 1:n Relation zu denormalisieren.</p> <blockquote> <p>Man kann sowieso nicht über Bits oder Bytes auf ENUM oder SET zugreifen.</p> </blockquote> <p>Äh doch, beim SET schon. <a href="https://dev.mysql.com/doc/refman/5.7/en/set.html" rel="nofollow noopener noreferrer">Gerade erst gelesen</a>, kurz vor den User-Comments.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Kann man mit PDO Klassen-Arrays aus der Database fetchen Thu, 12 Jul 18 05:47:25 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726420#m1726420 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726420#m1726420 <p>Tach!</p> <blockquote> <p>Ich hoffte aus der <em>DB</em> eine definierte Klasse zu extrahieren aber ich wurde eines besseren belert.</p> </blockquote> <p>Das geht prinzipiell, dass du dir Objekte einer bestimmten Klasse von der Fetch-Funktion <a href="http://php.net/manual/en/pdostatement.fetchobject.php" rel="noopener noreferrer">PDOStatement::fetchObject()</a> für jeden Datensatz der Ergebnismenge erzeugen lässt. Aber die erzeugt keine Eigenschaften vom Typ Array aus irgendwelchen Daten. Und dann gibt es auch noch das bereits erwähnte <a href="http://php.net/manual/en/pdostatement.fetchall.php" rel="noopener noreferrer">PDOStatement::fetchAll()</a>, dass dir die while-Schleife beim Fetchen mit PDOStatement::fetchObject() spart und ein komlettes Array mit je einem Objekt der angegebenen Klasse pro Datensatz der Ergebnismenge liefert.</p> <p>Falls es das ist, was du eigentlich meinst. In jedem Fall liefern die Fetch-Funktionen (außer fetchAll) einen komplexen Datentyp für jede Ergebniszeile mit je einem primitiven Typ pro Feld der Ergebnismenge.</p> <p>dedlfix.</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Thu, 12 Jul 18 05:48:43 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726421#m1726421 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726421#m1726421 <p>Hi MB,</p> <p>danke für Deine Rückmeldung. Für mich war es überhaupt nicht klar, was Du eigentlich erreichen wolltest, nun ist es klar </p> <blockquote> <p>Ich hoffte aus der <em>DB</em> eine definierte Klasse zu extrahieren</p> </blockquote> <p>Ist FETCH_CLASS gesetzt, kriegst Du eine neue Instanz; so stehts in der Doku. Wie ich die Doku verstehe, ist das eine Instanz der PDO Klasse bzw. einer derer Erweiterung an welche die Daten des Abfragestatements gebunden sind. Instanzen können Methoden aufrufen und wenn die Daten in der Instanz vorliegen, stehe die dann über <code>$this</code> in jeder Methode zur Verfügung -- Müssen also nicht als Funktionsargumente übergeben werden.</p> <p>Soweit zu dieser Idee, ich mach maln Beispiel zum besseren Verständnis.</p> <p>Bis dann </p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Thu, 12 Jul 18 17:26:01 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726492#m1726492 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726492#m1726492 <p>hi MB,</p> <p>das <a href="https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726428#m1726428" rel="noopener noreferrer">Beispiel</a> hast ja schon gesehen.</p> <p>Im Prinzip ist das so, daß man eine Referenz auf die Ergebnismenge mit dem Namen einer Klasse segnet, damit man mit dieser Referenz Methoden aufrufen kann.</p> <p><code>$r = $sth->fetchAll(PDO::FETCH_CLASS, 'Dumper');</code> segnet zwar nicht die gesamte Datenmenge sondern nur jeden darin enthaltenen Record, aber das Prinzip sollte verständlich sein.</p> <p>In Perl würde dasselbe etwa so aussehen:</p> <pre><code class="block language-perl"><span class="token keyword">use</span> strict<span class="token punctuation">;</span> <span class="token keyword">use</span> warnings<span class="token punctuation">;</span> <span class="token keyword">require</span> dd<span class="token punctuation">;</span> <span class="token keyword">my</span> <span class="token variable">$r</span> <span class="token operator">=</span> <span class="token operator">\</span><span class="token variable">%ENV</span><span class="token punctuation">;</span> <span class="token comment"># Referenz erzeugen</span> bless <span class="token variable">$r</span><span class="token punctuation">,</span> <span class="token string">'main'</span><span class="token punctuation">;</span> <span class="token comment"># Referenz mit dem Namen der Klasse main segnen</span> <span class="token variable">$r</span><span class="token operator">-></span>dd<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># Methode der Klasse main aufrufen</span> </code></pre> <p>Wobei hier der Einfachheit halber eine Referenz auf den Hash <code>%ENV</code> erzeugt wurde. In meiner Praxis mache ich prinzipiell dasselbe nur andersherum: Die Daten/Ergebnismenge werden in einer Instanz referenziert die bereits vorhanden ist. I.d.R. ist es diejenige Instanz die auch für die Ausgabe der Daten zuständig ist, z.B. ein FW-Instanz welche die Response erzeugt.</p> <p>In Perl kann man übrigens auch FileHandles blessen weil das auch Referenzen sind. Mit <code>IO::File</code> erstellte Handles sind mit ebendiesem Namen der Klasse gesegnet und gestatten es, Methoden wie <code>print()</code>, <code>seek()</code>, `truncate()´ usw. aufzurufen.</p> <p>Also allesamt ist das Alles nüscht Neues, aber ein Neuer sollte schonmal bereits beim Lesen der Doku darüber nachdenken. Nämlich darüber wie er das alles zweckmäßg verwenden kann. Der Rest ergibt sich in der Praxis </p> <p>MfG</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Thu, 12 Jul 18 06:01:04 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726424#m1726424 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726424#m1726424 <p>Tach!</p> <blockquote> <p>Ist FETCH_CLASS gesetzt, kriegst Du eine neue Instanz; so stehts in der Doku. Wie ich die Doku verstehe, ist das eine Instanz der PDO Klasse bzw. einer derer Erweiterung an welche die Daten des Abfragestatements gebunden sind.</p> </blockquote> <p>Nein, die Objekte sind entweder von einer anonymen Klasse, also stdClass oder vom angegebenen Typ. Bei PDOStatement::fetchObject() und PDOStatement::fetchAll() gibt man den Typ als Parameter an, bei PDOStatement::fetch() muss man ihn mittels separatem PDOStatement::setFetchMode() angeben. Diese Objekte haben nichts mit PDO-Klassen zu tun.</p> <p>dedlfix.</p> Kann man mit PDO Klassen-Arrays aus der Database fetchen Thu, 12 Jul 18 06:26:56 Z https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726428#m1726428 https://forum.selfhtml.org/self/2018/jul/10/kann-man-mit-pdo-klassen-arrays-aus-der-database-fetchen/1726428#m1726428 <p>Hi MB,</p> <blockquote> <p>Soweit zu dieser Idee, ich mach maln Beispiel zum besseren Verständnis.</p> </blockquote> <p>Hier isses:</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Dumper</span><span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">dump</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token function">print_r</span><span class="token punctuation">(</span> <span class="token variable">$this</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token variable">$m</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MySQL</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$q</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"SELECT * FROM log LIMIT 2"</span><span class="token punctuation">;</span> <span class="token variable">$sth</span> <span class="token operator">=</span> <span class="token variable">$m</span><span class="token operator">-></span><span class="token constant">DBH</span><span class="token operator">-></span><span class="token function">prepare</span><span class="token punctuation">(</span><span class="token variable">$q</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$sth</span><span class="token operator">-></span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$r</span> <span class="token operator">=</span> <span class="token variable">$sth</span><span class="token operator">-></span><span class="token function">fetchAll</span><span class="token punctuation">(</span><span class="token class-name static-context">PDO</span><span class="token operator">::</span><span class="token constant">FETCH_CLASS</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Dumper'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># Ausgaben</span> <span class="token function">print_r</span><span class="token punctuation">(</span><span class="token variable">$r</span><span class="token punctuation">)</span><span class="token punctuation">;</span> zeigt das da <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=></span> Dumper <span class="token keyword type-declaration">Object</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span>url<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token operator">/</span>login<span class="token operator">.</span>html <span class="token punctuation">[</span>ref<span class="token punctuation">]</span> <span class="token operator">=></span> localhost <span class="token punctuation">[</span>hugo<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">3</span>cb5c03fb01057bdf3fdea7062b49d7d <span class="token punctuation">[</span>dat<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">2015</span><span class="token operator">-</span><span class="token number">10</span><span class="token operator">-</span><span class="token number">06</span> <span class="token number">07</span><span class="token punctuation">:</span><span class="token number">35</span><span class="token punctuation">:</span><span class="token number">32</span> <span class="token punctuation">[</span>lang<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token punctuation">[</span>name<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token punctuation">[</span>title<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=></span> Dumper <span class="token keyword type-declaration">Object</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span>url<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token operator">/</span> <span class="token punctuation">[</span>ref<span class="token punctuation">]</span> <span class="token operator">=></span> http<span class="token punctuation">:</span><span class="token comment">//rolfrost/login.html</span> <span class="token punctuation">[</span>hugo<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">3</span>cb5c03fb01057bdf3fdea7062b49d7d <span class="token punctuation">[</span>dat<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">2015</span><span class="token operator">-</span><span class="token number">10</span><span class="token operator">-</span><span class="token number">06</span> <span class="token number">07</span><span class="token punctuation">:</span><span class="token number">35</span><span class="token punctuation">:</span><span class="token number">45</span> <span class="token punctuation">[</span>lang<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token punctuation">[</span>name<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token punctuation">[</span>title<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token variable">$r</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">-></span><span class="token function">dump</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> zeigt das da Dumper <span class="token keyword type-declaration">Object</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span>url<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token operator">/</span>login<span class="token operator">.</span>html <span class="token punctuation">[</span>ref<span class="token punctuation">]</span> <span class="token operator">=></span> localhost <span class="token punctuation">[</span>hugo<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">3</span>cb5c03fb01057bdf3fdea7062b49d7d <span class="token punctuation">[</span>dat<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">2015</span><span class="token operator">-</span><span class="token number">10</span><span class="token operator">-</span><span class="token number">06</span> <span class="token number">07</span><span class="token punctuation">:</span><span class="token number">35</span><span class="token punctuation">:</span><span class="token number">32</span> <span class="token punctuation">[</span>lang<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token punctuation">[</span>name<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token punctuation">[</span>title<span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token punctuation">)</span> </code></pre> <p>Du siehst also im ersten Dump daß die Ergebnismenge aus einzelnen Objekten besteht, diese Objekte sind Instanzen der Klasse <code>Dumper</code> die weiter oben deklariert und namentlich übergeben wurde. Mit jeder Instanz der Ergebnismenge ist es nun möglich, Methoden der Klasse <code>Dumper</code> aufzurufen, das zeigt <code>$r[0]->dump();</code></p> <p>Machs Beste daraus </p>