tag:forum.selfhtml.org,2005:/self Mysql: Tage zwischen 2 Datumsangaben auflisten – SELFHTML-Forum 2018-08-01T11:53:27Z https://forum.selfhtml.org/self/2018/jul/25/mysql-tage-zwischen-2-datumsangaben-auflisten/1727242#m1727242 juppix 2018-07-25T13:30:02Z 2018-07-25T13:30:02Z Mysql: Tage zwischen 2 Datumsangaben auflisten <p>Hallo zusammen,</p> <p>ich habe eine Tabelle ("items"), darin stehen Termine:</p> <pre><code class="block language-php"><span class="token class-name">Id</span> <span class="token operator">|</span> <span class="token class-name">Tag</span> <span class="token operator">|</span> <span class="token class-name">Text</span> <span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span>— <span class="token number">0</span> <span class="token operator">|</span> <span class="token number">2018</span><span class="token operator">-</span><span class="token number">05</span><span class="token operator">-</span><span class="token number">18</span> <span class="token number">10</span><span class="token punctuation">:</span><span class="token number">10</span><span class="token punctuation">:</span><span class="token number">00</span> <span class="token operator">|</span> <span class="token class-name">Testtermin</span> <span class="token number">1</span> <span class="token operator">|</span> <span class="token number">2018</span><span class="token operator">-</span><span class="token number">05</span><span class="token operator">-</span><span class="token number">18</span> <span class="token number">22</span><span class="token punctuation">:</span><span class="token number">19</span><span class="token punctuation">:</span><span class="token number">40</span> <span class="token operator">|</span> <span class="token class-name">Testtermin</span> <span class="token number">2</span> <span class="token number">2</span> <span class="token operator">|</span> <span class="token number">2019</span><span class="token operator">-</span><span class="token number">02</span><span class="token operator">-</span><span class="token number">19</span> <span class="token number">01</span><span class="token punctuation">:</span><span class="token number">08</span><span class="token punctuation">:</span><span class="token number">10</span><span class="token operator">|</span> <span class="token class-name">Testxyz</span> … </code></pre> <p>Nun möchte ich per MySql-Query</p> <ol> <li>erst einmal zwischen 2 Daten (bei mir 1 Jahr) alle möglichen Datumswerte auflisten lassen. und</li> <li>diese dann noch mit der SUMME aller Termine (wenn überhaupt vorhanden am entsprechenden Tag) darstellen lassen.</li> </ol> <p>Also das gewünschte Ergebnis der Abfrage (Zeitraum: 2018-01-01 00:00:00 bis einschl. 2018-12-31 23:59:59) sollte ergeben:</p> <pre><code class="block language-php"><span class="token class-name">Tag</span> <span class="token operator">|</span> <span class="token class-name">Summe</span> <span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span> <span class="token number">2018</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">01</span> <span class="token operator">|</span> <span class="token number">0</span> <span class="token number">2018</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">02</span> <span class="token operator">|</span> <span class="token number">0</span> <span class="token number">2018</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">03</span> <span class="token operator">|</span> <span class="token number">0</span> … <span class="token number">2018</span><span class="token operator">-</span><span class="token number">05</span><span class="token operator">-</span><span class="token number">18</span> <span class="token operator">|</span> <span class="token number">2</span> … <span class="token number">2018</span><span class="token operator">-</span><span class="token number">12</span><span class="token operator">-</span><span class="token number">30</span> <span class="token operator">|</span> <span class="token number">0</span> <span class="token number">2018</span><span class="token operator">-</span><span class="token number">12</span><span class="token operator">-</span><span class="token number">31</span> <span class="token operator">|</span> <span class="token number">0</span> </code></pre> <p>Folgenden Schnipsel habe ich gegoogelt, aber irgendwie bringt der mich nicht wirklich weiter da er immer nur ein paar Tage auflistet und nicht das ganze Jahr (kompletter Zeitraum) - wieso auch immer (??):</p> <pre><code class="block language-php">set @i <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> <span class="token constant">SELECT</span> <span class="token function">DATE</span><span class="token punctuation">(</span><span class="token function">ADDDATE</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'2018-01-01'</span><span class="token punctuation">,</span> <span class="token constant">INTERVAL</span> @i<span class="token punctuation">:</span><span class="token operator">=</span>@i<span class="token operator">+</span><span class="token number">1</span> <span class="token constant">DAY</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> date<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token constant">SELECT</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token constant">FROM</span> items <span class="token constant">WHERE</span> day <span class="token operator">=</span> <span class="token function">DATETIME</span><span class="token punctuation">(</span><span class="token function">ADDDATE</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'2018-01-01 00:00:00'</span><span class="token punctuation">,</span> <span class="token constant">INTERVAL</span> @i<span class="token punctuation">:</span><span class="token operator">=</span>@i<span class="token operator">+</span><span class="token number">1</span> <span class="token constant">DAY</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> summe <span class="token constant">FROM</span> <span class="token string backtick-quoted-string">`items`</span> <span class="token comment">/* WHERE YEAR(day) = 2018 */</span> <span class="token constant">HAVING</span> @i <span class="token operator"><</span> <span class="token function">DATEDIFF</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'2018-12-31'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'2018-01-01'</span><span class="token punctuation">)</span> </code></pre> <p>1000 Dank vorab für Eure Hilfe jupix</p> https://forum.selfhtml.org/self/2018/jul/25/mysql-tage-zwischen-2-datumsangaben-auflisten/1727257#m1727257 Felix Riesterer http://felix-riesterer.de 2018-07-25T16:11:45Z 2018-07-25T16:11:45Z Mysql: Tage zwischen 2 Datumsangaben auflisten <p>Lieber juppix,</p> <blockquote> <ol> <li>erst einmal zwischen 2 Daten (bei mir 1 Jahr) alle möglichen Datumswerte auflisten lassen.</li> </ol> </blockquote> <p>Das bedeutet ein <code>SELECT</code>, bei dem Du das Datum mit Grenzwerten definierst:</p> <pre><code class="block language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>items<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> <span class="token identifier"><span class="token punctuation">`</span>Tag<span class="token punctuation">`</span></span> <span class="token operator">>=</span> <span class="token string">'2018-01-01 00:00:00'</span> <span class="token operator">AND</span> <span class="token identifier"><span class="token punctuation">`</span>Tag<span class="token punctuation">`</span></span> <span class="token operator"><=</span> <span class="token string">'2018-12-31 23:59:59'</span><span class="token punctuation">;</span> </code></pre> <p>Das geht auch mit <code>BETWEEN</code>:</p> <pre><code class="block language-sql"><span class="token keyword">SELECT</span> <span class="token operator">*</span> <span class="token keyword">FROM</span> <span class="token identifier"><span class="token punctuation">`</span>items<span class="token punctuation">`</span></span> <span class="token keyword">WHERE</span> <span class="token identifier"><span class="token punctuation">`</span>Tag<span class="token punctuation">`</span></span> <span class="token operator">BETWEEN</span> <span class="token string">'2018-01-01 00:00:00'</span> <span class="token operator">AND</span> <span class="token string">'2018-12-31 23:59:59'</span><span class="token punctuation">;</span> </code></pre> <blockquote> <p>und 2. diese dann noch mit der SUMME aller Termine (wenn überhaupt vorhanden am entsprechenden Tag) darstellen lassen.</p> </blockquote> <p>Dazu kenne ich keine Lösung. Für alle <code>items</code> im oben definierten Zeitraum kannst Du ja <code>COUNT()</code> einsetzen, um die Gesamtanzahl zu ermitteln. Das ganze jedoch nach Tagen gezählt... hmm.</p> <blockquote> <pre><code class="block language-php"><span class="token class-name">Tag</span> <span class="token operator">|</span> <span class="token class-name">Summe</span> <span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span><span class="token operator">--</span> <span class="token number">2018</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">01</span> <span class="token operator">|</span> <span class="token number">0</span> <span class="token number">2018</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">02</span> <span class="token operator">|</span> <span class="token number">0</span> <span class="token number">2018</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">03</span> <span class="token operator">|</span> <span class="token number">0</span> … <span class="token number">2018</span><span class="token operator">-</span><span class="token number">05</span><span class="token operator">-</span><span class="token number">18</span> <span class="token operator">|</span> <span class="token number">2</span> … <span class="token number">2018</span><span class="token operator">-</span><span class="token number">12</span><span class="token operator">-</span><span class="token number">30</span> <span class="token operator">|</span> <span class="token number">0</span> <span class="token number">2018</span><span class="token operator">-</span><span class="token number">12</span><span class="token operator">-</span><span class="token number">31</span> <span class="token operator">|</span> <span class="token number">0</span> </code></pre> </blockquote> <p>Das bedeutet, dass Du auch für Nicht-Treffer einen Eintrag möchtest. Diese müsste die Abfrage erst erzeugen. Warum soll das schon in der Datenbank geschehen? Wäre es für Dich nicht schneller und verständlicher erreichbar, das mit PHP zu lösen?</p> <pre><code class="block language-php"><span class="token variable">$items</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'2018-01-01'</span> <span class="token operator">=></span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'2018-01-02'</span> <span class="token operator">=></span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'2018-01-03'</span> <span class="token operator">=></span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token operator">...</span> <span class="token string single-quoted-string">'2018-05-18'</span> <span class="token operator">=></span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token operator">...</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Du kannst ja meine obige SQL-Abfrage verwenden, um darüber zu iterieren und für jedes gefundene Datum den Wert im passenden Array-Index um eins erhöhen.</p> <pre><code class="block language-php"><span class="token variable">$db_data</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token number">0</span> <span class="token operator">=></span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'id'</span> <span class="token operator">=></span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Tag'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'2018-05-18 10:10:00'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Text'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'Testtermin'</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span> <span class="token operator">=></span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'id'</span> <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Tag'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'2018-05-18 22:19:40'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Text'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'Testtermin2'</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">2</span> <span class="token operator">=></span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'id'</span> <span class="token operator">=></span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Tag'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'2019-02-19 01:08:10'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'Text'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'Testxyz'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$day</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'2018-01-01'</span><span class="token punctuation">;</span> <span class="token variable">$end</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'2019-01-01'</span><span class="token punctuation">;</span> <span class="token variable">$items</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$day</span> <span class="token operator">!=</span> <span class="token variable">$end</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// UNIX timestamp for $day</span> <span class="token variable">$time</span> <span class="token operator">=</span> <span class="token function">strtotime</span><span class="token punctuation">(</span><span class="token variable">$day</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// create array key with counter at zero</span> <span class="token variable">$items</span><span class="token punctuation">[</span><span class="token variable">$day</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token comment">// find suitable item from DB</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$db_data</span> <span class="token keyword">as</span> <span class="token variable">$item</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// item for this day?</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$day</span> <span class="token operator">==</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y-m-d'</span><span class="token punctuation">,</span> <span class="token function">strtotime</span><span class="token punctuation">(</span><span class="token variable">$item</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Tag'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// increment counter by one</span> <span class="token variable">$items</span><span class="token punctuation">[</span><span class="token variable">$day</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">// go to next day</span> <span class="token variable">$day</span> <span class="token operator">=</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y-m-d'</span><span class="token punctuation">,</span> <span class="token function">strtotime</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'+1 day'</span><span class="token punctuation">,</span> <span class="token variable">$time</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 habe das jetzt nicht getestet, aber <code>$items</code> sollte in etwa Deine gewünschte Tabelle ausgeben.</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> https://forum.selfhtml.org/self/2018/jul/25/mysql-tage-zwischen-2-datumsangaben-auflisten/1727259#m1727259 Rolf B 2018-07-25T17:02:48Z 2018-07-25T17:02:48Z Mysql: Tage zwischen 2 Datumsangaben auflisten <p>Hallo juppix,</p> <p>ich nehme mal an, dass Du diese Query nicht so gegoogelt hast, sondern Fragmente davon. Und die dann zusammengesetzt hast, ohne sie zu verstehen.</p> <p>Eine SQL Query, die Nebenwirkungen auf Variablen hat (also dieses @i:=@i+1), ist kaum beherrschbar. Vor allem dann, wenn die Variable an zwei Stellen aktualisiert wird. Du weißt dann eigentlich nicht, wann was passiert; ich glaube nicht, dass Dir irgendwer garantiert, dass bei einem Select die Spaltenausdrücke immer von links nach rechts ausgewertet werden.</p> <p>Die Query funktioniert jedenfalls so, dass sie über die vorhandenen Termine läuft und dafür was zurecht fummelt. Wenn Du 47 Termine hast, bekommst Du 47 Ausgabezeilen. Das willst du nicht. Du willst eine Zeile pro Tag. Eine SQL Funktion, die Dir einen "Bereich" von 01-01-2018 bis 31-12-2018 produziert, gibt es aber meines Wissens nicht.</p> <p>Dazu kommt: Pro Zeile wird @i zweimal inkrementiert. Einmal für die date-Spalte, einmal für die summe-Spalte. In undefinierter Reihenfolge. D.h. der Inhalt der date-Spalte bezieht sich auf ein anderes Datum als der Inhalt der summe-Spalte. Das ist Murks.</p> <p>Du solltest, wie von Felix angeregt, in der SQL Query nur die Termine im gewünschten Intervall ermitteln. Das aber dann nach Datum gruppieren (GROUP BY) und die Anzahl der Termine pro Tag mit COUNT(*) bestimmen. Ich bin nicht ganz sicher, wie die Datumsspalte in deiner items-Tabelle heißt. Hier habe ich sie mal <code>datum</code> genannt.</p> <pre><code class="block language-sql"><span class="token keyword">SELECT</span> <span class="token keyword">DATE</span><span class="token punctuation">(</span>datum<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">COUNT</span><span class="token punctuation">(</span><span class="token operator">*</span><span class="token punctuation">)</span> <span class="token keyword">FROM</span> items <span class="token keyword">WHERE</span> datum <span class="token operator">BETWEEN</span> ? <span class="token operator">AND</span> ? <span class="token keyword">GROUP</span> <span class="token keyword">BY</span> <span class="token keyword">DATE</span><span class="token punctuation">(</span>datum<span class="token punctuation">)</span> <span class="token keyword">ORDER</span> <span class="token keyword">BY</span> <span class="token keyword">DATE</span><span class="token punctuation">(</span>datum<span class="token punctuation">)</span> </code></pre> <p>Ergebnis dieser Query ist eine Row pro Tag, an dem es Termine gibt, mit der Anzahl von Terminen an diesem Tag.</p> <p>Diese Query schickst Du von der Programmiersprache deines Vertrauens (JavaScript?! Das hast Du als Tag an den Beitrag gesetzt...) zur Datenbank und sorgst dafür, dass für die beiden Fragezeichen das minimale und maximale gewünschte Datum gebunden wird.</p> <p>Du bekommst dann eine Menge mit Tagen zurück, an denen Termine sind. Die liest Du in ein Array ein. Du solltest aber nicht, wie Felix im Testbeispiel, einen numerischen Index verwenden, sondern das Datum als String formatieren und dies als Index verwenden. Das macht es mühsamer, weil Du dann mit jedem Tag im SQL Ergebnis herumsuchen musst. Wie du das Date aus der Query korrekt in einen String übersetzt, musst Du Dir heraussuchen, das habe ich gerade nicht im Kopf.</p> <p>Dann kannst Du analog zu Felix' Schleife über den Zeitraum laufen, pro Tag ins Array gucken wieviele Einträge vermerkt sind, und das ausgeben. In meinem Beispiel verwende ich gleich das dd-mm-yyyy Format, das macht es lesbarer.</p> <pre><code class="block language-php"><span class="token variable">$db_data</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'18-05-2018'</span> <span class="token operator">=></span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'06-09-2018'</span> <span class="token operator">=></span> <span class="token number">7</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$day</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DateTime</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'01-01-2018'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$end</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DateTime</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'01-01-2019'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$oneDay</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DateInterval</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"P1D"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1 Tag</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$day</span> <span class="token operator"><</span> <span class="token variable">$end</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$dayKey</span> <span class="token operator">=</span> <span class="token variable">$day</span><span class="token operator">-></span><span class="token function">format</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"d-m-Y"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$db_data</span><span class="token punctuation">[</span><span class="token variable">$dayKey</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token variable">$anz</span> <span class="token operator">=</span> <span class="token variable">$db_data</span><span class="token punctuation">[</span><span class="token variable">$dayKey</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token variable">$anz</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token comment">// oder verkürzt:</span> <span class="token variable">$anz</span> <span class="token operator">=</span> <span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$db_data</span><span class="token punctuation">[</span><span class="token variable">$dayKey</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token variable">$db_data</span><span class="token punctuation">[</span><span class="token variable">$dayKey</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 comment">// Ausgabe</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"<span class="token interpolation"><span class="token variable">$dayKey</span></span>: <span class="token interpolation"><span class="token variable">$anz</span></span> Termin(e)"</span><span class="token punctuation">;</span> <span class="token comment">// Nur für DEMO</span> <span class="token comment">// go to next day</span> <span class="token variable">$day</span><span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span><span class="token variable">$oneDay</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2018/jul/25/mysql-tage-zwischen-2-datumsangaben-auflisten/1727274#m1727274 juppix 2018-07-25T19:26:38Z 2018-07-25T19:26:38Z Mysql: Tage zwischen 2 Datumsangaben auflisten <p>Boah! Ein dickes WOW und vielen Dank für die ausführlichen Antworten! Ich werde das einmal versuchen und Feedback geben!</p> <p>Respekt und Hut ab! </p> https://forum.selfhtml.org/self/2018/jul/25/mysql-tage-zwischen-2-datumsangaben-auflisten/1727275#m1727275 Felix Riesterer http://felix-riesterer.de 2018-07-25T20:19:58Z 2018-07-25T20:19:58Z Mysql: Tage zwischen 2 Datumsangaben auflisten <p>Lieber Rolf,</p> <blockquote> <p>Du solltest aber nicht, wie Felix im Testbeispiel, einen numerischen Index verwenden, sondern das Datum als String formatieren und dies als Index verwenden.</p> </blockquote> <p>das Ergebnis der Datenbankabfrage hat in aller Regel numerische Indices - je nachdem wie Deine Abfrage-Logik arbeitet. Das ist im Grunde auch egal. Das Iterieren geht in allen Fällen gleichermaßen gut.</p> <blockquote> <p>Das macht es mühsamer, weil Du dann mit jedem Tag im SQL Ergebnis herumsuchen musst.</p> </blockquote> <p>Dazu gibt es einen passenden Schlüssel <code>Tag</code> (Spaltenname). Wo ist das "mühsam"?</p> <blockquote> <p>Wie du das Date aus der Query korrekt in einen String übersetzt, musst Du Dir heraussuchen, das habe ich gerade nicht im Kopf.</p> </blockquote> <p>Er verwendet nicht Date, sondern DateTime. Da stehen Uhrzeiten mit dran. Daher verwende ich ja auch <code>strtotime()</code>, um einen UNIX-Timestamp daraus zu erzeugen, mit dem man dann wieder besser rechnen kann.</p> <blockquote> <p>Dann kannst Du analog zu Felix' Schleife über den Zeitraum laufen, pro Tag ins Array gucken wieviele Einträge vermerkt sind, und das ausgeben.</p> </blockquote> <p>Zugegeben. Die Zählung würde in Deinem Beispiel von der Datenbank geleistet, in meinem Beispiel von meiner PHP-Logik.</p> <blockquote> <p>In meinem Beispiel verwende ich gleich das dd-mm-yyyy Format, das macht es lesbarer.</p> </blockquote> <p>Lesbarer? Diese Transformation empfinde ich als sehr störend, da sie dann nicht mehr universell, sondern auf eine bestimmte "Locale" bezogen gilt. Das empfinde ich als "unsauberes Programmieren". Lieber ist mir eine Vorgehensweise, die erst bei der Ausgabe das Datumsformat überhaupt "lesbarer" macht. Für interne Berechnungen will ich YYYY-MM-DD, und zwar unter allen Umständen!</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> https://forum.selfhtml.org/self/2018/jul/25/mysql-tage-zwischen-2-datumsangaben-auflisten/1727306#m1727306 Rolf B 2018-07-26T09:20:28Z 2018-07-26T09:20:28Z Mysql: Tage zwischen 2 Datumsangaben auflisten <p>Hallo Felix,</p> <blockquote> <p>das Ergebnis der Datenbankabfrage hat in aller Regel numerische Indices</p> </blockquote> <p>Ja, sicher. Aber was ich sagen wollte, ist: Verwende nicht die nackte Datenbankabfrage. Bereite das Ergebnis so auf, dass es zur benötigten Verarbeitung passt. Ein Lookup über einen Hashkey ist schneller und kompakter programmiert als das sequenzielle Durchsuchen eines Array.</p> <p>Aber ich will zugeben, dass die Keys eines Lookup-Arrays besser im ISO-Format Ymd dargestellt sind.</p> <p>Mit "besser lesbar" meinte ich die Ausgabe. Alles als d-m-Y darzustellen erspart es, für Ausgabe und Lookup getrennt formatieren zu müssen. Aber du hast recht, das ist die Falle „Mikrooptimierung“, in die ich da getappt bin.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2018/jul/25/mysql-tage-zwischen-2-datumsangaben-auflisten/1727633#m1727633 juppix 2018-07-30T13:38:10Z 2018-07-30T13:38:10Z Mysql: Tage zwischen 2 Datumsangaben auflisten <p>Hi Rolf,</p> <p>ich kriege nach Deinem Beispiel oben nun meine Ergebnisse in folgendem Array...:</p> <pre><code class="block language-php"> <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> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span><span class="token number">2018</span><span class="token operator">-</span><span class="token number">06</span><span class="token operator">-</span><span class="token number">04</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">1</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> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span><span class="token number">2018</span><span class="token operator">-</span><span class="token number">06</span><span class="token operator">-</span><span class="token number">13</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span><span class="token number">2018</span><span class="token operator">-</span><span class="token number">06</span><span class="token operator">-</span><span class="token number">16</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span><span class="token number">2018</span><span class="token operator">-</span><span class="token number">06</span><span class="token operator">-</span><span class="token number">19</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">3</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span><span class="token number">2018</span><span class="token operator">-</span><span class="token number">06</span><span class="token operator">-</span><span class="token number">20</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">2</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span><span class="token number">2018</span><span class="token operator">-</span><span class="token number">06</span><span class="token operator">-</span><span class="token number">21</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span><span class="token number">2018</span><span class="token operator">-</span><span class="token number">06</span><span class="token operator">-</span><span class="token number">23</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">11</span> <span class="token punctuation">)</span> <span class="token operator">...</span> </code></pre> <p>Soweit so gut,</p> <p>leider klappt folgende Schleife nicht, die Du angegeben hast.</p> <p>Hier mein Code:</p> <pre><code class="block language-php"> <span class="token comment">/* HEATMAP -------------------------------------------------------------- */</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"showHeatmap"</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">$jahr</span> <span class="token operator">=</span> <span class="token variable">$_GET</span><span class="token punctuation">[</span><span class="token string double-quoted-string">"showHeatmap"</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// Hier wird das Jahr übergeben</span> <span class="token variable">$sql_heatmap</span> <span class="token operator">=</span> <span class="token function">sprintf</span><span class="token punctuation">(</span><span class="token string double-quoted-string">" SELECT DATE(items.day), COUNT(*) FROM items WHERE YEAR(items.day) = %d GROUP BY DATE(items.day) ORDER BY DATE(items.day) "</span><span class="token punctuation">,</span> <span class="token variable">$jahr</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$result_heatmap</span> <span class="token operator">=</span> <span class="token function">mysql_query</span><span class="token punctuation">(</span><span class="token variable">$sql_heatmap</span><span class="token punctuation">)</span> <span class="token keyword">or</span> <span class="token keyword">die</span><span class="token punctuation">(</span><span class="token function">mysql_error</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">$HeatmapZeilen</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$row_heatmap</span> <span class="token operator">=</span> <span class="token function">mysql_fetch_array</span><span class="token punctuation">(</span><span class="token variable">$result_heatmap</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$HeatmapZeilen</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span> <span class="token punctuation">(</span> <span class="token variable">$row_heatmap</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 variable">$row_heatmap</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">//die(print_r($HeatmapZeilen)); // Debug-Ausgabe des Arrays</span> <span class="token variable">$day</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DateTime</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'01-01-'</span><span class="token operator">.</span><span class="token variable">$jahr</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$end</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DateTime</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'01-01-'</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token variable">$jahr</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$oneDay</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DateInterval</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"P1D"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1 Tag</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$day</span> <span class="token operator"><</span> <span class="token variable">$end</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$dayKey</span> <span class="token operator">=</span> <span class="token variable">$day</span><span class="token operator">-></span><span class="token function">format</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"d-m-Y"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$HeatmapZeilen</span><span class="token punctuation">[</span><span class="token variable">$dayKey</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// HIER MUSS DER FEHLER LIEGEN</span> <span class="token variable">$anz</span> <span class="token operator">=</span> <span class="token variable">$HeatmapZeilen</span><span class="token punctuation">[</span><span class="token variable">$dayKey</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// HIER MUSS DER FEHLER LIEGEN</span> <span class="token keyword">else</span> <span class="token variable">$anz</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token comment">//echo '<hr>'.$dayKey.$anz;</span> <span class="token comment">// go to next day</span> <span class="token variable">$day</span><span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span><span class="token variable">$oneDay</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">/* HEATMAP -------------------------------------------------------------- */</span> </code></pre> <p>Es wird bei mir immer "0" pro Tag ausgegeben. Also "findet" er das Datum in meinem Array nicht (?). Und woher nimmt er dann die 2. Spalte (Summer der am Tag vorhandenen Termine?).</p> <p>Viele Grüße jupix</p> https://forum.selfhtml.org/self/2018/jul/25/mysql-tage-zwischen-2-datumsangaben-auflisten/1727634#m1727634 juppix 2018-07-30T14:07:05Z 2018-07-30T14:07:08Z Mysql: Tage zwischen 2 Datumsangaben auflisten <p>Ich glaube ich hab's rausgefunden: - 1000 Dank nochmals</p> <pre><code class="block language-php"> <span class="token variable">$HeatmapZeilen</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$row_heatmap</span> <span class="token operator">=</span> <span class="token function">mysql_fetch_array</span><span class="token punctuation">(</span><span class="token variable">$result_heatmap</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//$HeatmapZeilen[] = array ( $row_heatmap[0] => $row_heatmap[1] ); </span> <span class="token variable">$HeatmapZeilen</span><span class="token punctuation">[</span><span class="token variable">$row_heatmap</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$row_heatmap</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">//$HeatmapZeilen = array("test" => "J");</span> <span class="token comment">//die(print_r($HeatmapZeilen));</span> <span class="token comment">//$res_heatmap = mysql_fetch_array($result_heatmap);</span> <span class="token variable">$day</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DateTime</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'01-01-'</span><span class="token operator">.</span><span class="token variable">$jahr</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$end</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DateTime</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'01-01-'</span><span class="token operator">.</span><span class="token punctuation">(</span><span class="token variable">$jahr</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$oneDay</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DateInterval</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"P1D"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1 Tag</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$day</span> <span class="token operator"><</span> <span class="token variable">$end</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$dayKey</span> <span class="token operator">=</span> <span class="token variable">$day</span><span class="token operator">-></span><span class="token function">format</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"Y-m-d"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$HeatmapZeilen</span><span class="token punctuation">[</span><span class="token variable">$dayKey</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">$anz</span> <span class="token operator">=</span> <span class="token variable">$HeatmapZeilen</span><span class="token punctuation">[</span><span class="token variable">$dayKey</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token variable">$anz</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token comment">//echo '<hr>'.$dayKey.$anz;</span> <span class="token variable">$out</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'id'</span> <span class="token operator">=></span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'name'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'HEATMAP'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'location'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'('</span><span class="token operator">.</span><span class="token variable">$anz</span><span class="token operator">.</span><span class="token string single-quoted-string">'x)'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'startDate'</span> <span class="token operator">=></span> <span class="token variable">$dayKey</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'endDate'</span> <span class="token operator">=></span> <span class="token variable">$dayKey</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'color'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'#ff0000'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'typ'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'heatmap'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// go to next day</span> <span class="token variable">$day</span><span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span><span class="token variable">$oneDay</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> https://forum.selfhtml.org/self/2018/jul/25/mysql-tage-zwischen-2-datumsangaben-auflisten/1727783#m1727783 Rolf B 2018-08-01T11:35:08Z 2018-08-01T11:35:08Z Mysql: Tage zwischen 2 Datumsangaben auflisten <p>Hallo juppix,</p> <p>ich war seit Donnerstag nachmittag offline und konnte darum nicht antworten. Gut, dass Du den Formatierfehler selbst gefunden hast </p> <p>Ein kleiner A-Bär brummt aber in meinem Kopf herum. Die mysql-Schnittstelle ist seit PHP 5.5. missbilligt (deprecated) und mit PHP 7 nicht mehr Teil von PHP. Das solltest Du zumindest auf mysqli ändern, oder gleich auf PDO umsteigen.</p> <p><strong>Vor allem hat der kleine A-Bär noch einen großen Bruder, der soeben sein Maul aufreißt, um Dir die Finger abzubeißen:</strong> Du verwendest einen per URL-Parameter übergebenen Wert und überträgst ihn ungeprüft und unmaskiert in dein SQL. Wenn Dir jemand den String <code>; DROP TABLE items --</code> übergibt, ist deine Datenbank futsch.</p> <p>Grundhaltung des UI-Programmierers soll sein: Der User ist dein Feind und will Dich vernichten. Schütze Dich davor. Prüfe jeden Wert auf Plausibilität. Wenn Du Userdaten irgendwohin überträgst, entferne oder maskiere Zeichen, die im Zielkontext Schaden anrichten können. Denn dein User ist dein Feind und wird diesen Schaden verursachen, wo immer Du ihn lässt. PHP bietet dafür eine Menge Mittel an. <a href="https://wiki.selfhtml.org/wiki/Programmiertechnik/Kontextwechsel" rel="nofollow noopener noreferrer">Und unser Wiki hat dazu auch was</a>.</p> <p>Im vorliegenden Fall reicht ein einfaches intval(), um Angriffe über den Jahreszahl-Parameter zu entschärfen.</p> <p>Mit mysqli oder PDO kannst Du auch auf gebundene Parameter umsteigen und musst sie nicht mehr statisch ins SQL einsetzen.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> https://forum.selfhtml.org/self/2018/jul/25/mysql-tage-zwischen-2-datumsangaben-auflisten/1727789#m1727789 dedlfix 2018-08-01T11:53:27Z 2018-08-01T11:53:27Z Mysql: Tage zwischen 2 Datumsangaben auflisten <p>Tach!</p> <blockquote> <p><strong>Vor allem hat der kleine A-Bär noch einen großen Bruder, der soeben sein Maul aufreißt, um Dir die Finger abzubeißen:</strong> Du verwendest einen per URL-Parameter übergebenen Wert und überträgst ihn ungeprüft und unmaskiert in dein SQL. Wenn Dir jemand den String <code>; DROP TABLE items --</code> übergibt, ist deine Datenbank futsch.</p> </blockquote> <p>Geht nur mit mysqli_multi_query(). Aber andere Arten der SQL-Injection sind auch ohne zweites Statement möglich.</p> <blockquote> <p>Grundhaltung des UI-Programmierers soll sein: Der User ist dein Feind und will Dich vernichten. Schütze Dich davor. Prüfe jeden Wert auf Plausibilität. Wenn Du Userdaten irgendwohin überträgst, entferne oder maskiere Zeichen, die im Zielkontext Schaden anrichten können. Denn dein User ist dein Feind und wird diesen Schaden verursachen, wo immer Du ihn lässt. PHP bietet dafür eine Menge Mittel an. <a href="https://wiki.selfhtml.org/wiki/Programmiertechnik/Kontextwechsel" rel="nofollow noopener noreferrer">Und unser Wiki hat dazu auch was</a>.</p> </blockquote> <p>Zu speziell formuliert. Jegliche Daten und nicht nur Usereingaben müssen korrekt weiterverarbeitet werden. Selbst dann, wenn sie höchst vertrauenswürdig als Literal vorliegen.</p> <p>dedlfix.</p>