<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'mysqli.multi-query.php',
    1 => 'mysqli::multi_query',
    2 => 'Ejecuta una o varias consultas en la base de datos',
  ),
  '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' => 'es',
    '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">Ejecuta una o varias consultas en la base de datos</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-mysqli.multi-query-description">
  <h3 class="title">Descripción</h3>
  <p class="para">Estilo orientado a objetos</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">Estilo procedimental</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">
   Ejecuta una o varias consultas, agrupadas en el parámetro
   <code class="parameter">query</code> mediante puntos y comas.
  </p>
  <div class="warning"><strong class="warning">Advertencia</strong>
<h1 class="title">Advertencia de seguridad: Inyección SQL</h1><p class="para">Si la consulta contiene alguna entrada de variable,
entonces se deben usar <a href="mysqli.quickstart.prepared-statements.php" class="link">sentencias preparadas
parametrizadas</a> en su lugar. Alternativamente, los datos deben estar correctamente formateados y todas las cadenas deben ser escapadas usando
la función <span class="function"><a href="mysqli.real-escape-string.php" class="function">mysqli_real_escape_string()</a></span>.</p></div>
  <p class="para">
   Las consultas se envían en una sola llamada a la base de datos y se procesan
   de manera secuencial.
   <span class="methodname"><strong>mysqli_multi_query()</strong></span> espera a que la primera consulta
   se complete antes de devolver el control a PHP. Mientras tanto, el servidor MySQL
   continuará procesando las consultas restantes de manera asíncrona respecto a PHP y
   pondrá los resultados a disposición para su recuperación.
  </p>
  <p class="para">
   Se recomienda utilizar una
   <a href="control-structures.do.while.php" class="link">do-while</a> para procesar
   varias consultas. La conexión estará ocupada hasta que todas las
   consultas se completen y sus resultados sean recuperados por PHP.
   Ninguna otra consulta puede ser emitida en la misma conexión, hasta que
   todas las consultas sean procesadas.
   Para procesar la siguiente consulta en la secuencia, utilizar
   <span class="function"><a href="mysqli.next-result.php" class="function">mysqli_next_result()</a></span>. Si el siguiente resultado no está
   aún listo, mysqli esperará la respuesta desde el servidor MySQL.
   Para verificar si hay más resultados, utilizar
   <span class="function"><a href="mysqli.more-results.php" class="function">mysqli_more_results()</a></span>.
  </p>
  <p class="para">
   Para las consultas que producen un conjunto de resultados, como
   <code class="literal">SELECT, SHOW, DESCRIBE</code> o
   <code class="literal">EXPLAIN</code>,
   <span class="function"><a href="mysqli.use-result.php" class="function">mysqli_use_result()</a></span> o <span class="function"><a href="mysqli.store-result.php" class="function">mysqli_store_result()</a></span>
   pueden ser utilizados para recuperar el conjunto de resultados. Para las consultas que
   no producen un conjunto de resultados, las mismas funciones pueden ser
   utilizadas para recuperar información como el número de filas afectadas.
  </p>
  <div class="tip"><strong class="tip">Sugerencia</strong>
   <p class="para">
    Ejecutar una consulta <code class="literal">CALL</code> para procedimientos almacenados
    puede producir varios conjuntos de resultados. Si el procedimiento almacenado contiene
    consultas <code class="literal">SELECT</code>, los conjuntos de resultados son devueltos
    en el orden en que son producidos por la ejecución del procedimiento.
    En general, el llamador no puede saber cuántos conjuntos de resultados devolverá un
    procedimiento y debe estar preparado para recuperar varios resultados.
    El resultado final del procedimiento es un resultado de estado que no incluye
    un conjunto de resultados. El estado indica si el procedimiento tuvo éxito
    o si se produjo un error.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-mysqli.multi-query-parameters">
  <h3 class="title">Parámetros</h3>
  <p class="para">
   <dl>
    <dt>
<code class="parameter">mysql</code></dt><dd><p class="para">Solo estilo procedimental: Un objeto <span class="classname"><a href="class.mysqli.php" class="classname">mysqli</a></span>
devuelto por <span class="function"><a href="function.mysqli-connect.php" class="function">mysqli_connect()</a></span> o <span class="function"><a href="mysqli.init.php" class="function">mysqli_init()</a></span>
</p></dd>
    
     <dt><code class="parameter">query</code></dt>
     <dd>
      <p class="para">
       Una <span class="type"><a href="language.types.string.php" class="type string">string</a></span> que contiene las consultas a ejecutar.
       Varias consultas deben estar separadas por un punto y coma.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-mysqli.multi-query-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="para">
   Devuelve <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> únicamente si la primera consulta falla. Para recuperar
   las subsecuencias de errores provenientes de otras consultas, se debe llamar
   primero a la función <span class="function"><a href="mysqli.next-result.php" class="function">mysqli_next_result()</a></span>.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-mysqli.multi-query-errors">
  <h3 class="title">Errores/Excepciones</h3>
  <p class="para">
Si el informe de errores de mysqli está habilitado (<strong><code><a href="mysqli.constants.php#constant.mysqli-report-error">MYSQLI_REPORT_ERROR</a></code></strong>) y la operación solicitada falla,
se genera una advertencia. Si, además, el modo está configurado como <strong><code><a href="mysqli.constants.php#constant.mysqli-report-strict">MYSQLI_REPORT_STRICT</a></code></strong>,
se lanza una <span class="classname"><a href="class.mysqli-sql-exception.php" class="classname">mysqli_sql_exception</a></span> en su lugar.</p>
 </div>


 <div class="refsect1 examples" id="refsect1-mysqli.multi-query-examples">
  <h3 class="title">Ejemplos</h3>
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejemplo con <span class="methodname"><strong>mysqli::multi_query()</strong></span></strong></p>
   <div class="example-contents"><p>Estilo orientado a objetos</p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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">/* Ejecución de una consulta múltiple */<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">/* Almacenar el conjunto de resultados en PHP */<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">/* Imprimir divisor */<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">());<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Estilo procedimental</p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<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">/* Ejecución de una consulta múltiple */<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">/* Almacenar el conjunto de resultados en PHP */<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 />        </span><span style="color: #FF8000">/* Mostrar una separación */<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 />    }<br />    </span><span style="color: #FF8000">/* Imprimir divisor */<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">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Los ejemplos anteriores mostrarán algo similar a:</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">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="mysqli.query.php" class="function" rel="rdfs-seeAlso">mysqli_query()</a> - Ejecuta una consulta en la base de datos</span></li>
    <li><span class="function"><a href="mysqli.use-result.php" class="function" rel="rdfs-seeAlso">mysqli_use_result()</a> - Inicializa la recuperaci&oacute;n de un conjunto de resultados</span></li>
    <li><span class="function"><a href="mysqli.store-result.php" class="function" rel="rdfs-seeAlso">mysqli_store_result()</a> - Transfiere un conjunto de resultados desde la &uacute;ltima consulta</span></li>
    <li><span class="function"><a href="mysqli.next-result.php" class="function" rel="rdfs-seeAlso">mysqli_next_result()</a> - Prepara el siguiente resultado de una consulta m&uacute;ltiple</span></li>
    <li><span class="function"><a href="mysqli.more-results.php" class="function" rel="rdfs-seeAlso">mysqli_more_results()</a> - Comprueba si hay m&aacute;s conjuntos de resultados MySQL disponibles</span></li>
   </ul>
  </p>
 </div>


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