<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.pdo-sqlite.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'pdo-sqlite.setauthorizer.php',
    1 => 'Pdo\\Sqlite::setAuthorizer',
    2 => 'Configura una retrollamada para usarla como autorizador y limitar lo que puede hacer una sentencia',
  ),
  'up' => 
  array (
    0 => 'class.pdo-sqlite.php',
    1 => 'Pdo\\Sqlite',
  ),
  'prev' => 
  array (
    0 => 'pdo-sqlite.openblob.php',
    1 => 'Pdo\\Sqlite::openBlob',
  ),
  'next' => 
  array (
    0 => 'refs.database.vendors.php',
    1 => 'Extensiones de bases de datos espec&iacute;ficas del proveedor',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/pdo_sqlite/pdo/sqlite/setauthorizer.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="pdo-sqlite.setauthorizer" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">Pdo\Sqlite::setAuthorizer</h1>
  <p class="verinfo">(PHP 8 &gt;= 8.5.0)</p><p class="refpurpose"><span class="refname">Pdo\Sqlite::setAuthorizer</span> &mdash; <span class="dc-title">Configura una retrollamada para usarla como autorizador y limitar lo que puede hacer una sentencia</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-pdo-sqlite.setauthorizer-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="modifier">function</span> <span class="methodname"><strong>Pdo\Sqlite::setAuthorizer</strong></span>(<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span></span> <code class="parameter">$callback</code></span>): <span class="type"><a href="language.types.void.php" class="type void">void</a></span></div>

  <p class="simpara">
   Establece una retrollamada que será invocada por SQLite cada vez que se realice
   una acción (lectura, eliminación, actualización, etc.). Se utiliza cuando se prepara
   una sentencia SQL de una fuente no confiable para garantizar que la sentencia no acceda
   a datos que no tiene permitido ver ni ejecute sentencias maliciosas que dañen la base de datos.
  </p>
  <p class="simpara">
   El autorizador solo se utiliza durante la fase de preparación de la sentencia.
   Puede ser llamado varias veces para una sola sentencia: una consulta
   <code class="literal">SELECT</code> o <code class="literal">UPDATE</code> lo invoca por cada
   columna que sería leída o actualizada. Se ejecuta de nuevo cada vez que SQLite
   vuelve a preparar una sentencia, lo que puede ocurrir mientras la sentencia está siendo
   ejecutada, por ejemplo, después de que el esquema haya cambiado.
  </p>
  <p class="simpara">
   El autorizador es llamado con hasta cinco argumentos. Los argumentos recibidos se
   describen en <span class="methodname"><a href="sqlite3.setauthorizer.php" class="methodname">SQLite3::setAuthorizer()</a></span>.
  </p>
  <p class="simpara">
   Solo puede haber un autorizador activo en una conexión de base de datos a la vez.
   Cada llamada a este método reemplaza la anterior. El autorizador está deshabilitado
   de forma predeterminada, y puede deshabilitarse de nuevo estableciendo una retrollamada <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>.
  </p>
  <p class="simpara">
   La retrollamada no debe modificar la conexión de base de datos que la invocó.
  </p>
  <p class="simpara">
   Más detalles pueden encontrarse en la
   <a href="http://sqlite.org/c3ref/set_authorizer.html" class="link external">&raquo;&nbsp;documentación de SQLite</a>.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="simpara">
    Este método es el equivalente de <span class="methodname"><a href="sqlite3.setauthorizer.php" class="methodname">SQLite3::setAuthorizer()</a></span>,
    salvo que devuelve <span class="type"><span class="type"><a href="language.types.void.php" class="type void">void</a></span></span> en lugar de <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>.
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 parameters" id="refsect1-pdo-sqlite.setauthorizer-parameters">
  <h3 class="title">Parámetros</h3>
  <dl>
   
    <dt><code class="parameter">callback</code></dt>
    <dd>
     <p class="simpara">
      El <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> a invocar, o <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> para deshabilitar la
      retrollamada de autorización actual.
     </p>
     <p class="simpara">
      Debe devolver uno de <strong><code><a href="class.pdo-sqlite.php#pdo-sqlite.constants.ok">Pdo\Sqlite::OK</a></code></strong>,
      <strong><code><a href="class.pdo-sqlite.php#pdo-sqlite.constants.deny">Pdo\Sqlite::DENY</a></code></strong> o
      <strong><code><a href="class.pdo-sqlite.php#pdo-sqlite.constants.ignore">Pdo\Sqlite::IGNORE</a></code></strong>.
      Cuando se devuelve <strong><code><a href="class.pdo-sqlite.php#pdo-sqlite.constants.deny">Pdo\Sqlite::DENY</a></code></strong>, la sentencia que
      activó el autorizador falla con un error que indica que el acceso ha sido denegado.
      Cuando se devuelve <strong><code><a href="class.pdo-sqlite.php#pdo-sqlite.constants.ignore">Pdo\Sqlite::IGNORE</a></code></strong> para una acción de lectura,
      la sentencia se prepara de modo que se sustituye un valor <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> por la
      columna que habría sido leída.
     </p>
    </dd>
   
  </dl>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-pdo-sqlite.setauthorizer-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="simpara">
   No se retorna ningún valor.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-pdo-sqlite.setauthorizer-errors">
  <h3 class="title">Errores/Excepciones</h3>
  <p class="simpara">
   Este método en sí mismo no lanza excepciones, pero si la retrollamada del autorizador
   no devuelve un valor de tipo <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>, o devuelve un <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> que no es uno de
   <strong><code><a href="class.pdo-sqlite.php#pdo-sqlite.constants.ok">Pdo\Sqlite::OK</a></code></strong>, <strong><code><a href="class.pdo-sqlite.php#pdo-sqlite.constants.deny">Pdo\Sqlite::DENY</a></code></strong> o
   <strong><code><a href="class.pdo-sqlite.php#pdo-sqlite.constants.ignore">Pdo\Sqlite::IGNORE</a></code></strong>, la preparación de la sentencia lanza un
   <span class="exceptionname"><a href="class.typeerror.php" class="exceptionname">TypeError</a></span> o un <span class="exceptionname"><a href="class.valueerror.php" class="exceptionname">ValueError</a></span>
   respectivamente.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-pdo-sqlite.setauthorizer-examples">
  <h3 class="title">Ejemplos</h3>
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejemplo de <span class="methodname"><strong>Pdo\Sqlite::setAuthorizer()</strong></span></strong></p>
   <div class="example-contents"><p>
    Solo se permiten acciones de lectura en la conexión. Los códigos de acción están expuestos
    como constantes de clase <span class="classname"><a href="class.sqlite3.php" class="classname">SQLite3</a></span>, lo que requiere que la
    extensión <a href="book.sqlite3.php" class="link">SQLite3</a> esté disponible; sus
    valores enteros pueden usarse directamente en caso contrario.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$db </span><span style="color: #007700">= new </span><span style="color: #0000BB">Pdo\Sqlite</span><span style="color: #007700">(</span><span style="color: #DD0000">'sqlite::memory:'</span><span style="color: #007700">);
</span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">exec</span><span style="color: #007700">(</span><span style="color: #DD0000">'CREATE TABLE users (id, name)'</span><span style="color: #007700">);

</span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setAuthorizer</span><span style="color: #007700">(function (</span><span style="color: #0000BB">int $action</span><span style="color: #007700">, ...</span><span style="color: #0000BB">$args</span><span style="color: #007700">) {
    return match (</span><span style="color: #0000BB">$action</span><span style="color: #007700">) {
        </span><span style="color: #0000BB">SQLite3</span><span style="color: #007700">::</span><span style="color: #0000BB">SELECT</span><span style="color: #007700">, </span><span style="color: #0000BB">SQLite3</span><span style="color: #007700">::</span><span style="color: #0000BB">READ </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">Pdo\Sqlite</span><span style="color: #007700">::</span><span style="color: #0000BB">OK</span><span style="color: #007700">,
        default =&gt; </span><span style="color: #0000BB">Pdo\Sqlite</span><span style="color: #007700">::</span><span style="color: #0000BB">DENY</span><span style="color: #007700">,
    };
});

</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">'SELECT name FROM users'</span><span style="color: #007700">) instanceof </span><span style="color: #0000BB">PDOStatement</span><span style="color: #007700">);

try {
    </span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">exec</span><span style="color: #007700">(</span><span style="color: #DD0000">'DROP TABLE users'</span><span style="color: #007700">);
} catch (</span><span style="color: #0000BB">PDOException $e</span><span style="color: #007700">) {
    echo </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;
}
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

   <div class="example-contents"><p>Resultado del ejemplo anterior
es similar a:</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">bool(true)
SQLSTATE[HY000]: General error: 23 not authorized</pre>
</div>
   </div>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-pdo-sqlite.setauthorizer-seealso">
  <h3 class="title">Véase también</h3>
  <ul class="simplelist">
   <li><span class="methodname"><a href="sqlite3.setauthorizer.php" class="methodname" rel="rdfs-seeAlso">SQLite3::setAuthorizer()</a> - Configura una funci&oacute;n de retrollamada para utilizar como autorizador para limitar lo que una sentencia puede hacer</span></li>
  </ul>
 </div>


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