tag:forum.selfhtml.org,2005:/self mysql_fetch_: Letzte Position erkennen – SELFHTML-Forum 2019-04-24T11:22:56Z https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747316#m1747316 Linuchs 2019-04-24T09:22:13Z 2019-04-24T09:30:31Z mysql_fetch_: Letzte Position erkennen <p>Moin,</p> <p>wie kann ich in einer Schleife wie</p> <pre><code class="block language-php"><span class="token keyword">while</span> <span class="token punctuation">(</span> <span class="token variable">$row</span> <span class="token operator">=</span> <span class="token function">mysql_fetch_assoc</span><span class="token punctuation">(</span> <span class="token variable">$res</span> <span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// oder mysql_fetch_array</span> <span class="token operator">...</span> <span class="token comment">// Zeile ausgeben</span> <span class="token punctuation">}</span> </code></pre> <p>die letzte Position erkennen? Ich möchte beim Rückwärts-Seitenwechsel einer Liste auf die letzte Position verlinken, sie soll also eine id bekommen.</p> <p>Gruß, Linuchs</p> <p>EDIT: Ich habe ein Beispiel gefunden, in dem man die Sätze mitzählt und mit count() vergleicht. Sieht eher nach Krücke aus, kennt mySQL die Position ihrer eigenen Sätze nicht?</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747318#m1747318 Felix Riesterer https://felix-riesterer.de 2019-04-24T09:32:34Z 2019-04-24T09:32:34Z mysql_fetch_: Letzte Position erkennen <p>Lieber Linuchs,</p> <blockquote> <p>Ich möchte beim Rückwärts-Seitenwechsel einer Liste auf die letzte Position verlinken, sie soll also eine id bekommen.</p> </blockquote> <p>Du willst also eine Art Navigation haben, bei der "eine Seite zurück" mit der passenden ID versehen werden soll, damit auf der neuen Seite die korrekten Inhalte ermittelt werden können?</p> <p>Warum hast Du keine Gesamtliste aller notwendigen IDs, aus der Du die jeweils notwendigen IDs benutzt?</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747319#m1747319 dedlfix 2019-04-24T09:33:50Z 2019-04-24T09:33:50Z mysql_fetch_: Letzte Position erkennen <p>Tach!</p> <blockquote> <p>wie kann ich in einer Schleife wie</p> <pre><code class="block language-php"><span class="token keyword">while</span> <span class="token punctuation">(</span> <span class="token variable">$row</span> <span class="token operator">=</span> <span class="token function">mysql_fetch_assoc</span><span class="token punctuation">(</span> <span class="token variable">$res</span> <span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// oder mysql_fetch_array</span> <span class="token operator">...</span> <span class="token comment">// Zeile ausgeben</span> <span class="token punctuation">}</span> </code></pre> <p>die letzte Position erkennen?</p> </blockquote> <p>Wenn du das nicht anhand der Daten erkennen kannst, sehe ich keine direkte Möglichkeit. mysql_fetch_assoc() liefert erst dann etwas unterscheidbares, wenn es keinen Datensatz mehr liefern kann, also wenn es bereits hinter dem letzten Datensatz ist.</p> <p>Lass die Ergebnisse zuerst in ein Array laufen, das kann man besser auf solche Gegebenhaiten wie Anfang und Ende untersuchen, weil vom Array bereits die Gesamtanzahl der Elemente bekannt ist.</p> <p>Außerdem sind PHP-Versionen, in denen mysql-ohne-i-Funktionen laufen, klinisch tot.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747322#m1747322 ursus contionabundo 2019-04-24T09:53:42Z 2019-04-24T09:56:31Z mysql_fetch_: Letzte Position erkennen <p>Erstmal das:</p> <pre><code class="block bad language-text">Warnung Diese Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 entfernt. </code></pre> <blockquote> <p>wie kann ich in einer Schleife wie</p> </blockquote> <pre><code class="block bad language-php"><span class="token keyword">while</span> <span class="token punctuation">(</span> <span class="token variable">$row</span> <span class="token operator">=</span> <span class="token function">mysql_fetch_assoc</span><span class="token punctuation">(</span> <span class="token variable">$res</span> <span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// oder mysql_fetch_array</span> <span class="token operator">...</span> <span class="token comment">// Zeile ausgeben</span> <span class="token punctuation">}</span> </code></pre> <blockquote> <p>die letzte Position erkennen?</p> </blockquote> <p>mysqli_num_rows liefert die Anzahl der Datensätze. Das tat auch mysql_num_rows. Du könntest also mitzählen. Stellt sich die Frage wozu das gut sein soll, denn…</p> <p><strong>Nach dem <em>vollständigen</em> Durchlauf der Schleife steht in <code>$row</code> immer der letzte Datensatz</strong>. Soll heißen, Dein Problem existiert eigentlich gar nicht.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747324#m1747324 dedlfix 2019-04-24T09:56:39Z 2019-04-24T09:56:39Z mysql_fetch_: Letzte Position erkennen <p>Tach!</p> <blockquote> <p>EDIT: Ich habe ein Beispiel gefunden, in dem man die Sätze mitzählt und mit count() vergleicht. Sieht eher nach Krücke aus, kennt mySQL die Position ihrer eigenen Sätze nicht?</p> </blockquote> <p>Es gibt keine Positionsangabe in der Ergebnismenge. Eine Ergebnismenge hat nichts mit der Reihenfolge in der Tabelle zu tun, sondern hängt neben einschränkenden Bedingungen im WHERE und anderen SQL-Konstrukten nicht zuletzt auch vom Sortierkriterium ab.</p> <p>Du kannst aber LIMIT verwenden, solange die Querys ansonsten gleich bleiben. Gegen das zeitliche Problem, dass zwischen zwei Abfragen sich die Menge geändert haben kann, kannst du nichts weiter tun, solange du nicht mit einem eingefrorenen Snapshot arbeitest.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747328#m1747328 Linuchs 2019-04-24T10:05:09Z 2019-04-24T10:05:09Z mysql_fetch_: Letzte Position erkennen <p>ich kann doch in der Ergebnismenge mit <code>mysqli_data_seek</code> auf einen Satz der Fundmenge positionieren.</p> <p>Aber wie kann ich diesen Pointer abfragen, der ja mit <code>while</code> weitergeschaltet wird.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747343#m1747343 pl https://rolfrost.de/words.html 2019-04-24T11:11:51Z 2019-04-24T11:11:51Z mysql_fetch_: Letzte Position erkennen <p>Moin,</p> <p>wenn Du die Ergebnismenge als Array anfordern tätest, gäbe es eine Funktion <code>end()</code> welche Dir das letzte Element liefern würde. Idee!</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747320#m1747320 Linuchs 2019-04-24T09:49:01Z 2019-04-24T09:49:01Z mysql_fetch_: Letzte Position erkennen <p>Lieber Felix,</p> <blockquote> <p>Warum hast Du keine Gesamtliste aller notwendigen IDs, aus der Du die jeweils notwendigen IDs benutzt?</p> </blockquote> <p>Frage nicht verstanden. Klar, jeder Satz hat eine id. Aber wenn ich auf Seite 5 einer Liste bin, woher soll ich die letzte id der Seite 4 kennen?</p> <p>Und angenommen, ich kentete sie, was wäre, wenn nach stundenlangem Betrachten der Seite 5 genau diese id inzwischen gelöscht wäre?</p> <p>Im Moment, in dem ich Seite 4 aufbaue, möchte ich die letzte Zeile kennzeichnen.</p> <p>Gruß, Linuchs</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747325#m1747325 Linuchs 2019-04-24T09:56:47Z 2019-04-24T09:56:47Z mysql_fetch_: Letzte Position erkennen <blockquote> <p>Du willst also eine Art Navigation haben, bei der "eine Seite zurück" mit der passenden ID versehen werden soll, damit auf der neuen Seite die korrekten Inhalte ermittelt werden können?</p> </blockquote> <p>Nein. "eine Seite zurück" bedeutet die Angabe einer Seitenzahl.</p> <p>Welche Sätze es dann sind, ergibt sich aus der Positions-Anzahl der Liste (die als Parameter variabel sein kann).</p> <p>Beispiel: Seite 4 auf einer Liste mit 25 Positionen bedeutet <code>LIMIT 75,25</code></p> <p>Gruß, Linuchs</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747323#m1747323 Felix Riesterer https://felix-riesterer.de 2019-04-24T09:54:10Z 2019-04-24T09:54:10Z mysql_fetch_: Letzte Position erkennen <p>Lieber Linuchs,</p> <blockquote> <p>Frage nicht verstanden.</p> </blockquote> <p>wirklich?</p> <blockquote> <p>Aber wenn ich auf Seite 5 einer Liste bin, woher soll ich die letzte id der Seite 4 kennen?</p> </blockquote> <p>Indem Du eine Liste aller IDs hast, aus der Du die für Seite 5 benötigten IDs berechnest. Die ID, die vor diesen IDs in der Liste steht, ist die letzte für Seite 4. Oder passt das nicht für Dein Projekt?</p> <blockquote> <p>Und angenommen, ich kentete sie,</p> </blockquote> <p>Schöne Grammatik! :-)</p> <blockquote> <p>was wäre, wenn nach stundenlangem Betrachten der Seite 5 genau diese id inzwischen gelöscht wäre?</p> </blockquote> <p>Dann kann Dein Algorithmus in der Liste eben eine ID früher einsteigen. Du wirst ja den Eintrag nicht aus der DB entfernt, sondern nur mit einer Löschmarkierung versehen haben.</p> <blockquote> <p>Im Moment, in dem ich Seite 4 aufbaue, möchte ich die letzte Zeile kennzeichnen.</p> </blockquote> <p>Schon klar.</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747326#m1747326 dedlfix 2019-04-24T09:57:32Z 2019-04-24T09:57:32Z mysql_fetch_: Letzte Position erkennen <p>Tach!</p> <blockquote> <p><strong>Nach dem <em>vollständigen</em> Durchlauf der Schleife steht in <code>$row</code> immer der letzte Datensatz</strong>. Soll heißen, Dein Problem existiert eigentlich gar nicht.</p> </blockquote> <p>Nein, da steht ein false drin, sonst könnte <code>while</code> nicht bremsen.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747329#m1747329 dedlfix 2019-04-24T10:09:00Z 2019-04-24T10:09:00Z mysql_fetch_: Letzte Position erkennen <p>Tach!</p> <blockquote> <blockquote> <p>Aber wenn ich auf Seite 5 einer Liste bin, woher soll ich die letzte id der Seite 4 kennen?</p> </blockquote> <p>Indem Du eine Liste aller IDs hast, aus der Du die für Seite 5 benötigten IDs berechnest. Die ID, die vor diesen IDs in der Liste steht, ist die letzte für Seite 4.</p> </blockquote> <p>IDs sind hier unbrauchbar. Sie müssen nicht fortaufend und ohne Unterbrechung sein, sie können auch in x-beliebiger Reihenfolge vorkommen, wenn die Ergebnismenge nach einem anderen Kriterium sortiert ist. Wie willst du dann fortsetzen? Du musst für die näächste Seite dieselbe Abfrage stellen und dann in der vollständigen Ergebnismenge vorwärts laufen, bis die gesuchte ID auftritt. Eine Bedingung WHERE id kleiner oder größer ist, sentfernt auch diejenigen Datensätze, deren ID größer oder kleiner ist, die aber laut Sortierkrtiterium in der Ergebnismenge weiter vorn oder weiter hinten gelegen hätten.</p> <p>Wenn die Wikipedia sortierte Mengen seitenweise präsentiert, dann merkt sie sich nicht die nutzlose Datensatz-ID, sondern den Schlüsselwert (muss unique sein), nach dem sortiert worden ist, und selektiert für die nächste Seite alle Datensätze, deren Wert größer als letzte Wert der vorhergehenden Seite ist. Und das funktioniert dann problemlos, selbst wenn zwischendurch Seiten hinzugekommen oder weggefallen sind. Natürlich sieht man nicht nachträglich weiter vorn eingefügte Seiten, aber man erhält auch keine bereits gesehenen oder übersprungenen am Anfang der Seite, wenn durch das Ändern ein Versatz in der Positionsnummer entstanden ist.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747337#m1747337 Linuchs 2019-04-24T10:31:42Z 2019-04-24T10:31:42Z mysql_fetch_: Letzte Position erkennen <blockquote> <p>Es gibt keine Positionsangabe in der Ergebnismenge.</p> </blockquote> <p>Doch! Ich kann doch mit data_seek eine bestimmte Position ansteuern und ab da weiterlesen.</p> <p>mySQL kennt also ihren Pointer im result genau. Aber verrät ihn nicht?</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747330#m1747330 ursus contionabundo 2019-04-24T10:10:02Z 2019-04-24T10:15:25Z mysql_fetch_: Letzte Position erkennen <blockquote> <p>Tach!</p> <blockquote> <p><strong>Nach dem <em>vollständigen</em> Durchlauf der Schleife steht in <code>$row</code> immer der letzte Datensatz</strong>. Soll heißen, Dein Problem existiert eigentlich gar nicht.</p> </blockquote> <p>Nein, da steht ein false drin, sonst könnte <code>while</code> nicht bremsen.</p> </blockquote> <p>Stimmt. Du hast Recht. Lösung:</p> <pre><code class="block language-php"><span class="token keyword">while</span> <span class="token punctuation">(</span> <span class="token variable">$row</span> <span class="token operator">=</span> … <span class="token punctuation">)</span> <span class="token punctuation">{</span> … <span class="token variable">$lastRow</span> <span class="token operator">=</span> <span class="token variable">$row</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Dann stehts in <code>$lastRow</code>.</p> <p>2. Lösung: Man kann auch mitzählen. mysql[i]_nun_rows liefert ja die Anzahl der "Ergebniszeilen" und dann:</p> <pre><code class="block language-php"><span class="token variable">$c</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token comment"># $l = mysql_num_rows( $result );</span> <span class="token variable">$l</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-></span><span class="token property">num_rows</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span> <span class="token variable">$row</span> <span class="token operator">=</span> … <span class="token punctuation">)</span> <span class="token punctuation">{</span> … <span class="token variable">$c</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token variable">$l</span> <span class="token operator">==</span> <span class="token variable">$c</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$lastRow</span> <span class="token operator">=</span> <span class="token variable">$row</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>bei vielen/großen Feldern (Spalten) im Resultset könnte das Mitzählen billiger sein als das die Übernahme in eine weitere Variable.</p> <p>3. Lösung:</p> <p>Die abgefragten Datensätze enthalten womöglich eine ID oder eine unique Spalte, nach der laut Abfrage auch sortiert ist. Einfach merken, was bei <code>mysqli_fetch_assoc</code> rauskommt.</p> <pre><code class="block language-php"><span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$row</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-></span><span class="token function">fetch_assoc</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">$lastId</span> <span class="token operator">=</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'ID'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747332#m1747332 dedlfix 2019-04-24T10:14:35Z 2019-04-24T10:14:35Z mysql_fetch_: Letzte Position erkennen <p>Tach!</p> <blockquote> <p>ich kann doch in der Ergebnismenge mit <code>mysqli_data_seek</code> auf einen Satz der Fundmenge positionieren.</p> <p>Aber wie kann ich diesen Pointer abfragen, der ja mit <code>while</code> weitergeschaltet wird.</p> </blockquote> <p>Der nützt dir nichts, wenn du die nächste Seite einer bereits seitens des DBMS limitierten Ergebnismenge abfragst. Das ist lediglich ein PHP-interner Zeiger auf diese vom DBMS bereits erhaltene Ergebnismenge, der für das DBMS bedeutungslos ist. Du kannst da beispielsweise Werte von 0 bis 9 bei 10 Ergebnissen pro Seite als $row_number übergeben und bei der nächsten Seite wieder dieselben Zahlen.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747331#m1747331 Felix Riesterer https://felix-riesterer.de 2019-04-24T10:12:43Z 2019-04-24T10:12:43Z mysql_fetch_: Letzte Position erkennen <p>Lieber dedlfix,</p> <blockquote> <p>IDs sind hier unbrauchbar. Sie müssen nicht fortaufend und ohne Unterbrechung sein, sie können auch in x-beliebiger Reihenfolge vorkommen, wenn die Ergebnismenge nach einem anderen Kriterium sortiert ist. Wie willst du dann fortsetzen?</p> </blockquote> <p>ich gehe davon aus, dass es eine Liste aller IDs gibt, in der sie alle auffindbar sind. Dabei spielt es überhaupt keine Rolle, ob die IDs eine fortlaufende Nummerierung oder lustige Namen-Strings sind. Allein ihre Position in der Liste ist das Kriterium, um eine Paginierung davon abzuleiten.</p> <p>Aber ich gebe Dir insofern natürlich Recht, dass bei einer Art Paginierung ein Zählwert viel Sinnvoller ist, als eine ID, wenn man einen Link gestalten will.</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747333#m1747333 dedlfix 2019-04-24T10:19:44Z 2019-04-24T10:19:44Z mysql_fetch_: Letzte Position erkennen <p>Tach!</p> <blockquote> <p>Stimmt. Du hast Recht. Lösung:</p> </blockquote> <p>Ich hätte eine bessere im Angebot: Endlich <code>mysql</code> zugunsten von <code>mysqli</code> begraben, dann gibt es <a href="https://www.php.net/manual/en/mysqli-result.fetch-all.php" rel="nofollow noopener noreferrer">mysqli_fetch_all()</a>, das ohne weitere Schleife gleich ein Array liefert. - Ich weiß, großes Projekt, macht viel Arbeit, das alles umzustellen. Aber ewig mit dem bereits seit langem abgekündigten Altmetall zu arbeiten, macht es auch nicht besser. Andererseits die Ergebnismengendaten in ein Array zu fetchen ist auch keine Raketenwissenschaft.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747335#m1747335 dedlfix 2019-04-24T10:28:05Z 2019-04-24T10:28:43Z mysql_fetch_: Letzte Position erkennen <p>Tach!</p> <blockquote> <p>ich gehe davon aus, dass es eine Liste aller IDs gibt, in der sie alle auffindbar sind. Dabei spielt es überhaupt keine Rolle, ob die IDs eine fortlaufende Nummerierung oder lustige Namen-Strings sind. Allein ihre Position in der Liste ist das Kriterium, um eine Paginierung davon abzuleiten.</p> </blockquote> <p>Datensätze anhand der Position in der Ergebnismenge zu beschränken, ist bereits mit LIMIT problemarm möglich. Ohne LIMIT müsste man händisch die komplette vorhergehende Ergebnismenge durchzählen, um die Fortsetzung zu ermitteln. Das ist ein unverhältnismäßiger Aufwand, weil man das mit einer Stored Procedure serverseitig oder mit einer komplett zum Client übertragenenen Datenmenge machen müsste. LIMIT ist normalerweise das Mittel der Wahl zum seitenweisen Abfragen. Natürlich mit den Nachteilen, wenn Datensätze hinzugefügt oder entfernt werden, während man blättert.</p> <p>Um übrigens die Gesamtanzahl der unLIMITierten Menge zu bekommen, kann man <a href="https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_found-rows" rel="nofollow noopener noreferrer">FOUND_ROWS()</a> zusammen mit SQL_CALC_FOUND_ROWS verwenden. Das braucht man, um die Seitennummernanzeige für die Page-Links berechnen zu können.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747336#m1747336 ursus contionabundo 2019-04-24T10:31:40Z 2019-04-24T10:31:40Z mysql_fetch_: Letzte Position erkennen <blockquote> <p>Tach!</p> <blockquote> <p>Stimmt. Du hast Recht. Lösung:</p> </blockquote> <p>Ich hätte eine bessere im Angebot: Endlich <code>mysql</code> zugunsten von <code>mysqli</code> begraben</p> </blockquote> <p>Nun, das hatte ich dem <a href="/users/7877" class="mention registered-user" rel="noopener noreferrer">@Linuchs</a> auch <a href="https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747322#m1747322" rel="noopener noreferrer">nahe gelegt</a>. Wenn er schon daran fummelt, dann kann und sollte er auch modernisieren, damit die Chose morgen noch läuft. Hier mal ein Mail meines Hosters:</p> <pre><code class="block">im April 2019 werden wir beginnen, unsere Webserver auf eine neue Linux-Distribution zu aktualisieren, um auch weiterhin den höchsten Sicherheitsstandards und Performance-Ansprüchen genügen zu können. Aufgrund von Inkompatibilitäten zwischen älteren PHP-Versionen und den von der Distribution bereitgestellten aktuellen Versionen von Standard-Softwarebibliotheken wie OpenSSL können wir auf der neuen Webserver-Plattform nur PHP-Versionen ab 5.6 anbieten. </code></pre> <p>Damit ist das alte Mysql-Zeug tot.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747340#m1747340 Linuchs 2019-04-24T11:01:45Z 2019-04-24T11:08:18Z Einführung in sqli <blockquote> <blockquote> <p>Ich hätte eine bessere im Angebot: Endlich <code>mysql</code> zugunsten von <code>mysqli</code> begraben</p> </blockquote> </blockquote> <blockquote> <p>Nun, das hatte ich dem <a href="/users/7877" class="mention registered-user" rel="noopener noreferrer">@Linuchs</a> auch <a href="https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747322#m1747322" rel="noopener noreferrer">nahe gelegt</a>. Wenn er schon daran fummelt, dann kann und sollte er auch modernisieren, damit die Chose morgen noch läuft.</p> </blockquote> <p>Naja ... wahrscheinlich knallt es dann irgendwo im Gestrüpp der <code>include</code>. Wer kann mir eine kompakte Einführung für sqli nennen? Ich könnte wohl anfangen bei den Mini-Programmen, die auf Ajax-Anfragen reagieren.</p> <pre><code class="block">MySQL-Vers.=[10.1.37-MariaDB-0+deb9u1], [] PHP-Vers.=[5.6.40-0+deb8u1] </code></pre> <p>Als ich im Jahr 2001 mit PHP und mySQL begann, musste ich mächtig zurückschrauben, hatte vorher im großen Team professionell mit ORACLE und SAP-Schnittstellen gearbeitet. mySQL war irgendwie ein kostenloses "Spielzeug" auf Kleinstrechnern, wo ich mich heute noch wundere, dass es so oft funktioniert ;-)</p> <p>In meiner erzwungenen Bescheidenheit habe ich dann wohl einige Neuerungen verpasst, etwa die VIEWs. Die ältesten (und vergessenen) noch laufenden Programme treffe ich manchmal als Ergebnisse in Suchmaschinen.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747338#m1747338 dedlfix 2019-04-24T10:42:26Z 2019-04-24T10:42:26Z mysql_fetch_: Letzte Position erkennen <p>Tach!</p> <blockquote> <blockquote> <p>Es gibt keine Positionsangabe in der Ergebnismenge.</p> </blockquote> <p>Doch! Ich kann doch mit data_seek eine bestimmte Position ansteuern und ab da weiterlesen.</p> <p>mySQL kennt also ihren Pointer im result genau. Aber verrät ihn nicht?</p> </blockquote> <p>Nicht MySQL kennt die Zahl. Du musst dazu wissen, dass PHP bereits mit der mysql_query()-Funktion die Ergebnismenge zum Client holt. Ein Fetchen greift nur noch auf die bereits abgeholte Menge zu und macht nicht jedes Mal ein Daten-Holen vom Server. Nur so ist es möglich, zum Beispiel sofort ein mysql_num_rows() ausführen zu können, weil der Client bereits die Menge der Datensätze kennt. Ohne dieses Hintergrund-Fetchen wäre die Anzahl erst nach vollständigem Fetchen bekannt.</p> <p>Wenn du vorwärts und rückwärts blättern möchtest, nimm LIMIT und FOUND_ROWS() nebst SQL_CALC_FOUND_ROWS. Das ist die übliche Vorgehensweise, wenn zwischenzeitliche Änderungen am Datenbestand keine Berücksichtigung finden sollen. Man muss dabei auch nicht mitzählen, wieviele Datensätze man schon gefetcht/angezeigt hat. Das geht auch ohne und ist relativ einfache Mathematik. Sowas ist seit langem bekannt und Tutorials dazu gibt es garantiert.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747342#m1747342 Linuchs 2019-04-24T11:11:19Z 2019-04-24T11:13:04Z mysql_fetch_: Letzte Position erkennen <blockquote> <p>Nicht MySQL kennt die Zahl.</p> </blockquote> <p>Na gut, dann PHP, verrät aber auch nichts zur Position in einer Fundmenge?</p> <blockquote> <p>Wenn du vorwärts und rückwärts blättern möchtest, nimm LIMIT und FOUND_ROWS() nebst SQL_CALC_FOUND_ROWS.</p> </blockquote> <p>Nutze ich seit Jahren.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747345#m1747345 ursus contionabundo 2019-04-24T11:16:15Z 2019-04-24T11:18:36Z Umstieg von MySQL auf MySQLi oder PDO <p>Die Hilfe steht so nahe: SelfHTML→Wiki→PHP→Tutorials: <a href="https://wiki.selfhtml.org/wiki/PHP/Tutorials/Umstieg_von_MySQL#Umstieg_von_MySQL_auf_MySQLi_oder_PDO" rel="nofollow noopener noreferrer">Umstieg von MySQL auf MySQLi oder PDO</a></p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747346#m1747346 dedlfix 2019-04-24T11:17:44Z 2019-04-24T11:17:44Z mysql_fetch_: Letzte Position erkennen <p>Tach!</p> <blockquote> <p>Wer kann mir eine kompakte Einführung für sqli nennen?</p> </blockquote> <p>Das PHP-Handbuch <a href="https://www.php.net/manual/en/mysqlinfo.api.choosing.php" rel="nofollow noopener noreferrer">kann</a>. mysqli kommt in zwei Varianten, als Funktion (procedural style) oder in OOP. PDO gibt es auch noch, aber nur in OOP. Es ist was eigenständiges und obwohl konzeptionell nicht grundlegend anders, doch mit deutlichen Unterschieden zu den mysql(i)-Funktionen behaftet. Für den einfachen Umstieg nimm also mysqli und da die Funktionen. Meist beschränkt es sich darauf, ein i einzufügen und die Parameter umzudrehen. Die Verbindungskennung war bisher meist am Ende und oft optional. Sie ist nun der erste Parameter und damit Pflicht. Der Rest ist größtenteils gleich, gelegntlich aber auch erweitert worden. Das PHP-Handbuch klärt auf über die Funktionsweise der neuen Funktionen auf. Zu den alten mysql-Funktionen ist meist ein Link zum i-Äquivalent im Handbuch zu finden.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2019/apr/24/mysql-fetch-letzte-position-erkennen/1747347#m1747347 dedlfix 2019-04-24T11:22:56Z 2019-04-24T11:22:56Z mysql_fetch_: Letzte Position erkennen <p>Tach!</p> <blockquote> <p>Na gut, dann PHP, verrät aber auch nichts zur Position in einer Fundmenge?</p> </blockquote> <p>Nicht das ich wüsste. Aber ich schätze, dass du diese Information eigentlich auch nicht brauchst, und es für das eigentliche Problem eine bessere Lösung gibt, die das Problem mit der Positionsnumer gleich gar nicht hat.</p> <p>dedlfix.</p>