<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.mysqli.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'mysqli.multi-query.php',
    1 => 'mysqli::multi_query',
    2 => 'F&uuml;hrt eine oder mehrere Abfragen in einer Datenbank durch',
  ),
  'up' => 
  array (
    0 => 'class.mysqli.php',
    1 => 'mysqli',
  ),
  'prev' => 
  array (
    0 => 'mysqli.more-results.php',
    1 => 'mysqli::more_results',
  ),
  'next' => 
  array (
    0 => 'mysqli.next-result.php',
    1 => 'mysqli::next_result',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'reference/mysqli/mysqli/multi-query.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mysqli.multi-query" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">mysqli::multi_query</h1>
  <h1 class="refname">mysqli_multi_query</h1>
  <p class="verinfo">(PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">mysqli::multi_query</span> -- <span class="refname">mysqli_multi_query</span> &mdash; <span class="dc-title">Führt eine oder mehrere Abfragen in einer Datenbank durch</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-mysqli.multi-query-description">
  <h3 class="title">Beschreibung</h3>
  <p class="para">Objektorientierter Stil</p>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="methodname"><strong>mysqli::multi_query</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$query</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="para rdfs-comment">Prozeduraler Stil</p>
  <div class="methodsynopsis dc-description"><span class="methodname"><strong>mysqli_multi_query</strong></span>(<span class="methodparam"><span class="type"><a href="class.mysqli.php" class="type mysqli">mysqli</a></span> <code class="parameter">$mysql</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$query</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="para rdfs-comment">
   Führt eine oder mehrere Abfragen aus, die durch Semikolons getrennt sind.
  </p>
  <div class="warning"><strong class="warning">Warnung</strong>
<h1 class="title">Sicherheitswarnung: SQL-Injection</h1><p class="para">Wenn die Abfrage
irgendwelche Eingabevariablen enthält, sollten stattdessen
<a href="mysqli.quickstart.prepared-statements.php" class="link">parametrisierte Prepared Statements</a>
verwendet werden. Alternativ dazu müssen die Daten korrekt formatiert sein und
alle Strings müssen mit der Funktion
<span class="function"><a href="mysqli.real-escape-string.php" class="function">mysqli_real_escape_string()</a></span> maskiert werden.</p></div>
  <p class="para">
   Die Abfragen werden dabei asynchron in einem einzigen Aufruf an die
   Datenbank gesendet, aber die Datenbank verarbeitet sie sequentiell.
   <span class="methodname"><strong>mysqli_multi_query()</strong></span> wartet, bis die erste Abfrage
   abgeschlossen ist, bevor es die Kontrolle an PHP zurückgibt. Der
   MySQL-Server verarbeitet dann der Reihe nach die nächsten Abfragen. Sobald
   das nächste Ergebnis vorliegt, wartet MySQL darauf, dass die Funktion
   <span class="function"><a href="mysqli.next-result.php" class="function">mysqli_next_result()</a></span> von PHP erneut ausgeführt wird.
  </p>
  <p class="para">
   Es wird empfohlen, eine
   <a href="control-structures.do.while.php" class="link">do-while</a>-Schleife zu
   verwenden, um mehrere Abfragen zu verarbeiten. Die Verbindung ist so lange
   belegt, bis alle Abfragen abgeschlossen sind und ihre Ergebnisse an PHP
   übermittelt wurden. Solange nicht alle Abfragen abgearbeitet sind, kann
   keine andere Anweisung auf derselben Verbindung ausgeführt werden. Um mit
   der nächsten Abfrage in der Reihenfolge fortzufahren, muss
   <span class="function"><a href="mysqli.next-result.php" class="function">mysqli_next_result()</a></span> verwendet werden. Wenn das nächste
   Ergebnis noch nicht bereit ist, wartet mysqli auf die Antwort des
   MySQL-Servers. Um zu prüfen, ob es weitere Ergebnisse gibt, kann
   <span class="function"><a href="mysqli.more-results.php" class="function">mysqli_more_results()</a></span> verwendet werden.
  </p>
  <p class="para">
   Bei Abfragen, die eine Ergebnismenge zurückgeben, also zum Beispiel
   <code class="literal">SELECT, SHOW, DESCRIBE</code> oder <code class="literal">EXPLAIN</code>,
   können die Funktionen <span class="function"><a href="mysqli.use-result.php" class="function">mysqli_use_result()</a></span> oder
   <span class="function"><a href="mysqli.store-result.php" class="function">mysqli_store_result()</a></span> verwendet werden, um die
   Ergebnismenge abzurufen. Bei Abfragen, die keine Ergebnismenge zurückgeben,
   können die gleichen Funktionen verwendet werden, um Informationen wie die
   Anzahl der betroffenen Zeilen abzurufen.
  </p>
  <div class="tip"><strong class="tip">Tipp</strong>
   <p class="para">
    Wenn <code class="literal">CALL</code>-Anweisungen für gespeicherte Prozeduren
    ausgeführt werden, können mehrere Ergebnismengen erzeugt werden. Wenn die
    gespeicherte Prozedur <code class="literal">SELECT</code>-Anweisungen enthält,
    werden die Ergebnismengen in der Reihenfolge zurückgegeben, in der sie bei
    der Ausführung der Prozedur erzeugt werden. Im Allgemeinen kann der
    Aufrufende nicht wissen, wie viele Ergebnismengen eine Prozedur
    zurückgeben wird, und muss damit rechnen, mehrere Ergebnisse abrufen zu
    müssen. Das letzte Ergebnis der Prozedur ist ein Statusergebnis, das keine
    Ergebnismenge enthält. Der Status gibt an, ob die Prozedur erfolgreich war
    oder ein Fehler aufgetreten ist.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-mysqli.multi-query-parameters">
  <h3 class="title">Parameter-Liste</h3>
  <p class="para">
   <dl>
    <dt>
<code class="parameter">mysql</code></dt><dd><p class="para">Nur bei prozeduralem Aufruf: ein von
<span class="function"><a href="function.mysqli-connect.php" class="function">mysqli_connect()</a></span> oder <span class="function"><a href="mysqli.init.php" class="function">mysqli_init()</a></span>
zurückgegebenes <span class="classname"><a href="class.mysqli.php" class="classname">mysqli</a></span>-Objekt.</p></dd>
    
     <dt><code class="parameter">query</code></dt>
     <dd>
      <p class="para">
       Eine Zeichenkette mit den Abfragen, die ausgeführt werden sollen.
       Mehrere Abfragen müssen durch ein Semikolon getrennt werden.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-mysqli.multi-query-returnvalues">
  <h3 class="title">Rückgabewerte</h3>
  <p class="para">
   Wenn die erste Anweisung fehlgeschlagen ist, wird <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurückgegeben. Um
   nachfolgende Fehler von anderen Anweisungen zu erhalten, muss zuerst die
   Funktion <span class="function"><a href="mysqli.next-result.php" class="function">mysqli_next_result()</a></span> aufgerufen werden.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-mysqli.multi-query-errors">
  <h3 class="title">Fehler/Exceptions</h3>
  <p class="para">
If mysqli error reporting is enabled (<strong><code><a href="mysqli.constants.php#constant.mysqli-report-error">MYSQLI_REPORT_ERROR</a></code></strong>) and the requested operation fails,
a warning is generated. If, in addition, the mode is set to <strong><code><a href="mysqli.constants.php#constant.mysqli-report-strict">MYSQLI_REPORT_STRICT</a></code></strong>,
a <span class="classname"><a href="class.mysqli-sql-exception.php" class="classname">mysqli_sql_exception</a></span> is thrown instead.</p>
 </div>


 <div class="refsect1 examples" id="refsect1-mysqli.multi-query-examples">
  <h3 class="title">Beispiele</h3>
  <div class="example" id="example-1">
   <p><strong>Beispiel #1 <span class="methodname"><strong>mysqli::multi_query()</strong></span>-Beispiel</strong></p>
   <div class="example-contents"><p>Objektorientierter Stil</p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />mysqli_report</span><span style="color: #007700">(</span><span style="color: #0000BB">MYSQLI_REPORT_ERROR </span><span style="color: #007700">| </span><span style="color: #0000BB">MYSQLI_REPORT_STRICT</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$mysqli </span><span style="color: #007700">= new </span><span style="color: #0000BB">mysqli</span><span style="color: #007700">(</span><span style="color: #DD0000">"localhost"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_user"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_password"</span><span style="color: #007700">, </span><span style="color: #DD0000">"world"</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$query </span><span style="color: #007700">= </span><span style="color: #DD0000">"SELECT CURRENT_USER();"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$query </span><span style="color: #007700">.= </span><span style="color: #DD0000">"SELECT Name FROM City ORDER BY ID LIMIT 20, 5"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Mehrfachabfrage ausführen */<br /></span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">multi_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$query</span><span style="color: #007700">);<br />do {<br />    </span><span style="color: #FF8000">/* Ergebnismenge in PHP speichern */<br />    </span><span style="color: #007700">if (</span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">store_result</span><span style="color: #007700">()) {<br />        while (</span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">$result</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch_row</span><span style="color: #007700">()) {<br />            </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"%s\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$row</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);<br />        }<br />    }<br />    </span><span style="color: #FF8000">/* Trennlinie ausgeben */<br />    </span><span style="color: #007700">if (</span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">more_results</span><span style="color: #007700">()) {<br />        </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"-----------------\n"</span><span style="color: #007700">);<br />    }<br />} while (</span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">next_result</span><span style="color: #007700">());</span></span></code></div>
   </div>

   <div class="example-contents"><p>Prozeduraler Stil</p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />mysqli_report</span><span style="color: #007700">(</span><span style="color: #0000BB">MYSQLI_REPORT_ERROR </span><span style="color: #007700">| </span><span style="color: #0000BB">MYSQLI_REPORT_STRICT</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$link </span><span style="color: #007700">= </span><span style="color: #0000BB">mysqli_connect</span><span style="color: #007700">(</span><span style="color: #DD0000">"localhost"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_user"</span><span style="color: #007700">, </span><span style="color: #DD0000">"my_password"</span><span style="color: #007700">, </span><span style="color: #DD0000">"world"</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$query </span><span style="color: #007700">= </span><span style="color: #DD0000">"SELECT CURRENT_USER();"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$query </span><span style="color: #007700">.= </span><span style="color: #DD0000">"SELECT Name FROM City ORDER BY ID LIMIT 20, 5"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">/* Mehrfachabfrage ausführen */<br /></span><span style="color: #0000BB">mysqli_multi_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$link</span><span style="color: #007700">, </span><span style="color: #0000BB">$query</span><span style="color: #007700">);<br />do {<br />    </span><span style="color: #FF8000">/* Ergebnismenge in PHP speichern */<br />    </span><span style="color: #007700">if (</span><span style="color: #0000BB">$result </span><span style="color: #007700">= </span><span style="color: #0000BB">mysqli_store_result</span><span style="color: #007700">(</span><span style="color: #0000BB">$link</span><span style="color: #007700">)) {<br />        while (</span><span style="color: #0000BB">$row </span><span style="color: #007700">= </span><span style="color: #0000BB">mysqli_fetch_row</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">)) {<br />            </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"%s\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">$row</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);<br />        }<br />    }<br />    </span><span style="color: #FF8000">/* Trennlinie ausgeben */<br />    </span><span style="color: #007700">if (</span><span style="color: #0000BB">mysqli_more_results</span><span style="color: #007700">(</span><span style="color: #0000BB">$link</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"-----------------\n"</span><span style="color: #007700">);<br />    }<br />} while (</span><span style="color: #0000BB">mysqli_next_result</span><span style="color: #007700">(</span><span style="color: #0000BB">$link</span><span style="color: #007700">));</span></span></code></div>
   </div>

   <div class="example-contents"><p>Oben gezeigte Beispiele erzeugen
eine ähnliche Ausgabe wie:</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">my_user@localhost
-----------------
Amersfoort
Maastricht
Dordrecht
Leiden
Haarlemmermeer</pre>
</div>
   </div>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-mysqli.multi-query-seealso">
  <h3 class="title">Siehe auch</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="mysqli.query.php" class="function" rel="rdfs-seeAlso">mysqli_query()</a> - F&uuml;hrt eine Abfrage in einer Datenbank durch</span></li>
    <li><span class="function"><a href="mysqli.use-result.php" class="function" rel="rdfs-seeAlso">mysqli_use_result()</a> - Initiiert den Abruf einer Ergebnismenge</span></li>
    <li><span class="function"><a href="mysqli.store-result.php" class="function" rel="rdfs-seeAlso">mysqli_store_result()</a> - &Uuml;bertr&auml;gt die Ergebnismenge der letzten Abfrage</span></li>
    <li><span class="function"><a href="mysqli.next-result.php" class="function" rel="rdfs-seeAlso">mysqli_next_result()</a> - Bereitet das n&auml;chste Ergebnis von multi_query vor</span></li>
    <li><span class="function"><a href="mysqli.more-results.php" class="function" rel="rdfs-seeAlso">mysqli_more_results()</a> - Pr&uuml;ft, ob es von einer Mehrfachabfrage noch weitere Abfrageergebnisse gibt</span></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>