<?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.createfunction.php',
    1 => 'Pdo\\Sqlite::createFunction',
    2 => 'Registra una funci&oacute;n de usuario para su uso en las sentencias SQL',
  ),
  'up' => 
  array (
    0 => 'class.pdo-sqlite.php',
    1 => 'Pdo\\Sqlite',
  ),
  'prev' => 
  array (
    0 => 'pdo-sqlite.createcollation.php',
    1 => 'Pdo\\Sqlite::createCollation',
  ),
  'next' => 
  array (
    0 => 'pdo-sqlite.loadextension.php',
    1 => 'Pdo\\Sqlite::loadExtension',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/pdo_sqlite/pdo/sqlite/createfunction.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="pdo-sqlite.createfunction" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">Pdo\Sqlite::createFunction</h1>
  <p class="verinfo">(PHP 8 &gt;= 8.4.0)</p><p class="refpurpose"><span class="refname">Pdo\Sqlite::createFunction</span> &mdash; <span class="dc-title">
   Registra una función de usuario para su uso en las sentencias SQL
  </span></p>

 </div>

 <div class="refsect1 description" id="refsect1-pdo-sqlite.createfunction-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="methodname"><strong>Pdo\Sqlite::createFunction</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$function_name</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$callback</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$num_args</code><span class="initializer"> = -1</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$flags</code><span class="initializer"> = 0</span></span><br>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="simpara">
   Este método permite que las funciones PHP sean registradas con SQLite como
   funciones definidas por el usuario, de modo que puedan ser llamadas en las consultas SQL.
   La función definida puede ser utilizada en cualquier consulta SQL que permita llamadas a funciones,
   por ejemplo <code class="literal">SELECT</code>, <code class="literal">UPDATE</code>, o disparadores.
  </p>
  <div class="tip"><strong class="tip">Sugerencia</strong>
   <p class="simpara">
    Utilizando este método, es posible reemplazar las funciones SQL nativas.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-pdo-sqlite.createfunction-parameters">
  <h3 class="title">Parámetros</h3>
  <dl>
   
    <dt><code class="parameter">function_name</code></dt>
    <dd>
     <span class="simpara">
      El nombre de la función utilizado en las sentencias SQL.
     </span>
    </dd>
   
   
    <dt><code class="parameter">callback</code></dt>
    <dd>
     <span class="simpara">
      La retrollamada para gestionar la función SQL definida.
     </span>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <span class="simpara">
       La retrollamada debe retornar un tipo comprendido por SQLite (es decir,
       <a href="language.types.intro.php" class="link">tipo escalar</a>).
      </span>
     </p></blockquote>
     <p class="para">
      Esta función debe ser definida como:
      <div class="methodsynopsis dc-description">
       <span class="methodname"><span class="replaceable">callback</span></span>(<span class="methodparam"><span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> <code class="parameter">$value</code></span>, <span class="methodparam"><span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span> <code class="parameter">...$values</code></span>): <span class="type"><a href="language.types.mixed.php" class="type mixed">mixed</a></span></div>

      <dl>
       
        <dt><code class="parameter">value</code></dt>
        <dd>
         <p class="para">
          El primer argumento pasado a la función SQL.
         </p>
        </dd>
       
       
        <dt><code class="parameter">values</code></dt>
        <dd>
         <p class="para">
          Los argumentos adicionales pasados a la función SQL.
         </p>
        </dd>
       
      </dl>
     </p>
    </dd>
   
   
    <dt><code class="parameter">num_args</code></dt>
    <dd>
     <span class="simpara">
      El número de argumentos que la función SQL toma.
      Si este parámetro es <code class="literal">-1</code>,
      entonces la función SQL puede tomar cualquier número de argumentos.
     </span>
    </dd>
   
   
    <dt><code class="parameter">flags</code></dt>
    <dd>
     <span class="simpara">
      Una máscara de bits de flags.
      Actualmente, solo <strong><code><a href="class.pdo-sqlite.php#pdo-sqlite.constants.deterministic">Pdo\Sqlite::DETERMINISTIC</a></code></strong> es soportado,
      lo que especifica que la función retorna siempre el mismo resultado
      dados los mismos valores de entrada en una sola sentencia SQL.
     </span>
    </dd>
   
  </dl>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-pdo-sqlite.createfunction-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="simpara">
   Esta función retorna <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> en caso de éxito o <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si ocurre un error.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-pdo-sqlite.createfunction-examples">
  <h3 class="title">Ejemplos</h3>
  <div class="example" id="pdo-sqlite.createfunction.example.basic">
   <p><strong>Ejemplo #1 Ejemplo de <span class="methodname"><strong>Pdo\Sqlite::createFunction()</strong></span></strong></p>
   <div class="example-contents"><p>
    En este ejemplo, tenemos una función que calcula la suma SHA256 de una
    string, luego la invierte. Cuando la sentencia SQL es ejecutada, retorna
    el valor del nombre de fichero transformado por nuestra función.
    Los datos retornados en <var class="varname">$rows</var> contienen el resultado procesado.
   </p></div>
   <div class="example-contents"><p>
    La ventaja de esta técnica es que no es necesario procesar el
    resultado utilizando un bucle <a href="control-structures.foreach.php" class="link"><code class="literal">foreach</code></a> después de la ejecución de la consulta.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">sha256_and_reverse</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">)<br />{<br />    return </span><span style="color: #0000BB">strrev</span><span style="color: #007700">(</span><span style="color: #0000BB">hash</span><span style="color: #007700">(</span><span style="color: #DD0000">'sha256'</span><span style="color: #007700">, </span><span style="color: #0000BB">$string</span><span style="color: #007700">));<br />}<br /><br /></span><span style="color: #0000BB">$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::sqlitedb'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">createFunction</span><span style="color: #007700">(</span><span style="color: #DD0000">'sha256rev'</span><span style="color: #007700">, </span><span style="color: #DD0000">'sha256_and_reverse'</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$rows </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 sha256rev(filename) FROM files'</span><span style="color: #007700">)-&gt;</span><span style="color: #0000BB">fetchAll</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-pdo-sqlite.createfunction-seealso">
  <h3 class="title">Ver también</h3>
  <ul class="simplelist">
   <li><span class="methodname"><a href="pdo-sqlite.createaggregate.php" class="methodname" rel="rdfs-seeAlso">Pdo\Sqlite::createAggregate()</a> - Registra una funci&oacute;n de agregaci&oacute;n definida por el usuario para su uso en instrucciones SQL</span></li>
   <li><span class="methodname"><a href="pdo-sqlite.createcollation.php" class="methodname" rel="rdfs-seeAlso">Pdo\Sqlite::createCollation()</a> - Registra una funci&oacute;n de usuario de ordenaci&oacute;n para su uso en las sentencias SQL</span></li>
   <li><span class="function"><strong>sqlite_create_function()</strong></span></li>
   <li><span class="function"><strong>sqlite_create_aggregate()</strong></span></li>
  </ul>
 </div>


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