Philip,

Can you please activate Alejandro´s SVN account?
He said that many students at his university of computer science are taking
advantage of our work and now its time for him to give back.

These are the files he translated so far:
/es/reference/pdo/prepared-statements.xml
/es/reference/pdo/pdo/lastinsertedid.xml
/es/reference/pdo/pdo/prepare.xml
/es/reference/pdo/pdo/query.xml
/es/reference/pdo/pdo/quote.xml

Please find the files attached.

Thank you!

Yago

On Tue, Dec 6, 2011 at 4:44 AM, Alejandro Rodas <alexrd...@gmail.com> wrote:

> I would like to have an SVN account to help with the Spanish translation
> of the PHP Manual.
>
>


-- 
Yago Ferrer
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: $ -->
<!-- EN-Revision: 317502 Maintainer: Alejandro Rodas Status: ready -->
<!-- Reviewed: no -->

<chapter xml:id="pdo.prepared-statements" xmlns="http://docbook.org/ns/docbook"; xmlns:xlink="http://www.w3.org/1999/xlink";>
 <title>Sentencias preparadas y procedimientos almacenados</title>
 <para>
  Muchas de las bases de datos más maduras soportan el concepto de sentencias preparadas.
  Pueden definirse como un tipo de plantillas compiladas para SQL que las aplicaciones desean
  ejecutar, que pueden ser personalizadas usando parámetros variables. Las sentencias preparadas
  ofrecen dos grandes beneficios:
 </para>
 <itemizedlist>
  <listitem>
   <simpara>
    La consulta sólo necesita ser interpretada (o preparada) una vez, pero puede
    ser ejecutada en múltiples ocasiones con los mismos o diferentes parámetros.
    Cuando la consulta es preparada, la base de datos analizará, compilará y 
    optimizará su plan para ejecutar la consulta. Para consultas complejas este
    proceso puede tomar suficiente tiempo como para que ralentice
    notablemente una aplicación si se necesita repetir la misma consulta muchas
    veces con los mismos parámetros. Usando una sentencia preparada la aplicación
    evita repetir el ciclo de análisis/compilación/optimización. Esto significa
    que las sentencias preparadas usan menos recursos y se ejecutan más rápidamente.
   </simpara>
  </listitem>
  <listitem>
   <simpara>
    Los parámetros para las sentencias preparadas no necesitan estar entrecomillados;
    el driver automáticamente se encarga de esto. Si una aplicación usa exclusivamente
    sentencias preparadas, el desarrollador puede estar seguro de que no ocurrirán
    inyecciones SQL (sin embargo, si otras partes de la consulta se construyen con
    datos de entrada sin escapar, las inyecciones SQL pueden ocurrir).
   </simpara>
  </listitem>
 </itemizedlist>
 <para>
  Las sentencias preparadas son tan útiles que son la única característica que PDO
  emulará para drivers que no las soporten. Esto asegura que una aplicación será capaz
  de usar el mismo paradigma de acceso a datos independientemente de las capacidades
  de la base de datos.
 </para>
 <para>
  <example>
   <title>Múltiples inserts usando sentencias preparadas</title>
   <simpara>
    Este ejemplo realiza dos consulta de tipo INSERT sustituyendo <literal>name</literal>
    y <literal>value</literal> por los valores equivalentes.
   </simpara>
   <programlisting role="php">
<![CDATA[
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// insertar una fila
$name = 'one';
$value = 1;
$stmt->execute();

// insertar otra fila con diferentes valores
$name = 'two';
$value = 2;
$stmt->execute();
?>
]]>
   </programlisting>
  </example>
 </para>
 <para>
  <example>
   <title>Múltiples inserts usando sentencias preparadas</title>
   <simpara>
    Este ejemplo realiza dos consultas de tipo INSERT sustituyendo <literal>name</literal>
    y <literal>value</literal> por el parámetro de sustitución<literal>?</literal>.
   </simpara>
   <programlisting role="php">
<![CDATA[
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insertar una fila
$name = 'one';
$value = 1;
$stmt->execute();

// insertar otra fila con diferentes valores
$name = 'two';
$value = 2;
$stmt->execute();
?>
]]>
   </programlisting>
  </example>
 </para>
 <para>
  <example>
   <title>Buscar datos usando sentencias preparadas</title>
   <simpara>
    Este ejemplo busca datos basándose en un valor clave proporcionado por un formulario.
    Los datos de usuario son automáticamente entrecomillados, con lo cual no hay
    riesgo de un ataque por inyección SQL.
   </simpara>
   <programlisting role="php">
<![CDATA[
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>
]]>
   </programlisting>
  </example>
 </para>
 <para>
  Si el driver de la base de datos lo soporta, una aplicación puede también enlazar
  parámetros de salida al igual que para entrada. Los parámetros de salida son
  típicamente usados para recuperar valores de procedimientos almacenados. Los
  parámetros de salida son ligeramente más complejos de usar que los de entrada, de
  manera que el desarrollador debe saber cuánto de grande puede ser un parámetro
  cuando se enlaza. Si el valor resulta ser más grande que el tamaño que se ha
  supuesto, se eleva un error.
 </para>
 
 <para>
  <example>
   <title>Llamar a un procedimiento almacenado con un parámetro de salida</title>
   <programlisting role="php">
<![CDATA[
<?php
$stmt = $dbh->prepare("CALL sp_returns_string(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); 

// llamar al procedimiento almacenado
$stmt->execute();

print "procedure returned $return_value\n";
?>
]]>
   </programlisting>
  </example>
 </para>
 
 <para>
  Los desarrolladores pueden también especificar parámetros que contendrán valores
  tanto de entrada como de salida; la sintaxis es similar a la de los parámetros
  de salida. En el siguiente ejemplo, la cadena 'hello' es pasada al procedimiento
  almacenado, y cuando éste finaliza, 'hello' es reemplazada con el valor de retorno
  del procedimiento.
 </para>
 
 <para>
  <example>
   <title>Llamar a un procedimiento almacenado con un parámetro de entrada/salida</title>
   <programlisting role="php">
<![CDATA[
<?php
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

// llamar al procedimiento almacenado
$stmt->execute();

print "procedure returned $value\n";
?>
]]>
   </programlisting>
  </example>
 </para>
 <para>
  <example>
   <title>Uso inválido de un parámetro de sustitución</title>
   <programlisting role="php">
<![CDATA[
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));

// los parámetros de sustitución deben ser usados en el lugar del valor completo
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>
]]>
   </programlisting>
  </example>
 </para>
</chapter>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision: $ -->
<!-- EN-Revision: 315005 Maintainer: Alejandro Rodas Status: ready -->
<!-- Reviewed: no -->

<refentry xml:id="pdo.lastinsertid" xmlns="http://docbook.org/ns/docbook";>
 <refnamediv>
  <refname>PDO::lastInsertId</refname>
  <refpurpose>
   Devuelve el ID de la última fila o secuencia insertada
  </refpurpose>
 </refnamediv>
 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type>string</type><methodname>PDO::lastInsertId</methodname>
   <methodparam choice="opt"><type>string</type><parameter>name</parameter><initializer>&null;</initializer></methodparam>
  </methodsynopsis>

  <para>
   Devuelve el ID de la última fila insertada, o el último valor de una
   secuencia de objetos, dependiendo del driver subyacente. Por ejemplo,
   <function>PDO_PGSQL</function> requiere especificar el nombre de la
   secuencia de objetos para el parámetro <parameter>name</parameter>.
  </para>
  <note>
   <para>
    Este método puede no devolver resultados significativos o consistentes
    para diferentes drivers PDO, debido a que la base de datos subyacente puede no
    soportar el concepto de campos auto-incrementales o secuencias.
   </para>
  </note>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>name</parameter></term>
     <listitem>
      <para>
       Name of the sequence object from which the ID should be returned.
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   If a sequence name was not specified for the <parameter>name</parameter>
   parameter, <function>PDO::lastInsertId</function> returns a
   string representing the row ID of the last row that was inserted into
   the database.
  </para>
  <para>
   If a sequence name was specified for the <parameter>name</parameter>
   parameter, <function>PDO::lastInsertId</function> returns a
   string representing the last value retrieved from the specified sequence
   object.
  </para>
  <para>
   If the PDO driver does not support this capability,
   <function>PDO::lastInsertId</function> triggers an
   <literal>IM001</literal> SQLSTATE.
  </para>
 </refsect1>

</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision: $ -->
<!-- EN-Revision: 317502 Maintainer: Alejandro Rodas Status: ready -->
<!-- Reviewed: no -->

<refentry xml:id="pdo.prepare" xmlns="http://docbook.org/ns/docbook";>
 <refnamediv>
  <refname>PDO::prepare</refname>
  <refpurpose>
   Prepara una sentencia para su ejecución y devuelve un objeto sentencia
  </refpurpose>
 </refnamediv>
 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type>PDOStatement</type><methodname>PDO::prepare</methodname>
   <methodparam><type>string</type><parameter>statement</parameter></methodparam>
   <methodparam choice="opt"><type>array</type><parameter>driver_options</parameter><initializer>array()</initializer></methodparam>
  </methodsynopsis>

  <para>
   Prepara una sentencia SQL para ser ejecutada por el método
   <function>PDOStatement::execute</function>. La sentencia SQL puede
   contener cero o más marcadores de parámetros con nombre (:name) o signos de interrogación (?)
   por los cuales los valores reales serán sustituidos cuando la sentencia sea ejecutada.
   No se pueden usar marcadores de parámetros con nombre y signos de interrogación en
   la misma sentencia SQL; se debe elegir uno de los dos estilos de parámetros.
   Se deben usar estos parámetros para sustituir cualquier dato de usuario, y no usarlos
   directamente en la consulta.
  </para>
  <para>
   Se debe incluir un único marcador de parámetro para cada valor que se desee pasar
   a la sentencia cuando se llame a <function>PDOStatement::execute</function>.
   No se puede usar más de un marcador de parámetro con el mismo nombre en la misma
   sentencia. No se puede sustituir múltiples valores en un único parámetro con nombre,
   por ejemplo, en la cláusula IN() de una sentencia SQL.
  </para>
  <para>
   Llamar a <function>PDO::prepare</function> y a
   <function>PDOStatement::execute</function> para sentencias que serán
   ejecutadas en múltiples ocasiones con diferentes parámetros optimiza el
   rendimiento de la aplicación permitiendo al driver negociar en lado del
   cliente y/o servidor el almacenamiento en caché del plan de consulta y meta información,
   y ayuda a prevenir inyecciones SQL eliminando la necesidad de 
   entrecomillar manualmente los parámetros.
  </para>
  <para>
   PDO emulará sentencias preparadas/parámetros de sustitución para drivers que
   no lo soporten nativamente, y puede reescribir el estilo de los parámetros de
   sustitución por una forma más apropiada, si el driver
   soporta un estilo pero no el otro.
  </para>
 </refsect1>
 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>statement</parameter></term>
     <listitem>
      <para>
       Debe ser una sentencia SQL válida para el servidor de base de datos destino.
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>driver_options</parameter></term>
     <listitem>
      <para>
       Este array guarda uno o más pares clave=&gt;valor para establecer
       el valor de los atributos del objeto PDOStatement que este método
       devuelve. Comúnmente se establece el valor <literal>PDO::ATTR_CURSOR</literal> a
       <literal>PDO::CURSOR_SCROLL</literal> para solicitar el cursor desplazable.
       Algunos drivers tienen opciones específicas que pueden ser establecidas
       en el momento de la preparación.
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   Si el servidor de la base de datos prepara con éxito la sentencia,
   <function>PDO::prepare</function> devuelve un objeto <classname>PDOStatement</classname>.
   Si no es posible, <function>PDO::prepare</function> devuelve &false;
   o emite una excepción<classname>PDOException</classname> (dependiendo del <link
   linkend="pdo.error-handling">manejo de errores</link>).
  </para>
  <note>
   <para>
    Las sentencias preparadas emuladas no se comunican con el servidor de la base de datos
    con lo cual  <function>PDO::prepare</function> no comprueba la sentencia.
   </para>
  </note>
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example><title>Prepara una sentencia SQL con parámetros de sustitución nombrados</title>
    <programlisting role="php">
<![CDATA[
<?php
/* Ejecuta una sentencia preparada pasando un array de valores */
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
?>
]]>
    </programlisting>
   </example>
   <example>
    <title>Prepara una sentencia SQL con parámetros de signos de interrogación</title>
    <programlisting role="php">
<![CDATA[
<?php
/* Ejecuta una sentencia preparada pasando un array de valores */
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
$sth->execute(array(175, 'yellow'));
$yellow = $sth->fetchAll();
?>
]]>
    </programlisting>
   </example>
  </para>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member><function>PDO::exec</function></member>
    <member><function>PDO::query</function></member>
    <member><function>PDOStatement::execute</function></member>
   </simplelist>
  </para>
 </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: $ -->
<!-- EN-Revision: 297028 Maintainer: Alejandro Rodas Status: ready -->
<!-- Reviewed: no -->

<refentry xml:id="pdo.query" xmlns="http://docbook.org/ns/docbook";>
 <refnamediv>
  <refname>PDO::query</refname>
  <refpurpose>
   Ejecuta una sentencia SQL, devolviendo un conjunto de resultados como un objeto PDOStatement
  </refpurpose>
 </refnamediv>
 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type>PDOStatement</type><methodname>PDO::query</methodname>
   <methodparam><type>string</type><parameter>statement</parameter></methodparam>
  </methodsynopsis>

  <methodsynopsis>
   <type>PDOStatement</type><methodname>PDO::query</methodname>
   <methodparam><type>string</type><parameter>statement</parameter></methodparam>
   <methodparam><type>int</type><parameter>PDO::FETCH_COLUMN</parameter></methodparam>
   <methodparam><type>int</type><parameter>colno</parameter></methodparam>
  </methodsynopsis>

  <methodsynopsis>
   <type>PDOStatement</type><methodname>PDO::query</methodname>
   <methodparam><type>string</type><parameter>statement</parameter></methodparam>
   <methodparam><type>int</type><parameter>PDO::FETCH_CLASS</parameter></methodparam>
   <methodparam><type>string</type><parameter>classname</parameter></methodparam>
   <methodparam><type>array</type><parameter>ctorargs</parameter></methodparam>
  </methodsynopsis>

  <methodsynopsis>
   <type>PDOStatement</type><methodname>PDO::query</methodname>
   <methodparam><type>string</type><parameter>statement</parameter></methodparam>
   <methodparam><type>int</type><parameter>PDO::FETCH_INTO</parameter></methodparam>
   <methodparam><type>object</type><parameter>object</parameter></methodparam>
  </methodsynopsis>

  <para>
   <function>PDO::query</function> ejecuta una sentencia SQL en
   una única llamada a función, devolviendo el conjunto de resultados (si los hay) que devuelve
   la sentencia como un objeto PDOStatement.
  </para>
  <para>
   Para una consulta que se necesite ejecutar en múltiples ocasiones, se obtendrá una mejor
   rendimiento si se prepara un objeto PDOStatement usando
   <function>PDO::prepare</function> y ejecutando la sentencia con múltiple
   llamadas a <function>PDOStatement::execute</function>.
  </para>
  <para>
   Si no se buscan todos los datos del conjunto de resultados antes de ejecutar la
   siguiente llamada a <function>PDO::query</function>, ésta puede fallar. Llamando
   a <function>PDOStatement::closeCursor</function> se liberan los recursos
   de la base de datos asociados al objeto PDOStatement antes de ejecutar la
   siguiente llamada a <function>PDO::query</function>.
  </para>

  <note>
   <para>
    Aunque esta función está documentada solamente teniendo un único
    parámetro, se pueden pasar argumentos adicionales a esta función.
    Éstos serán tratados como si se llamase a
    <function>PDOStatement::setFetchMode</function> con el objeto de la sentencia
    resultante.
   </para>
  </note>

 </refsect1>
 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>statement</parameter></term>
      <listitem>
       <para>
        La sentencia SQL a preparar y ejecutar.
       </para>
       <para>
        Los datos dentro de la consulta deben ser <link
        linkend="pdo.quote">debidamente escapados</link>.
       </para>
      </listitem>
     </varlistentry>
   </variablelist>
  </para>
 </refsect1>
 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
    <function>PDO::query</function> devuelve un objeto PDOStatement, o &false;
    en caso de error.
  </para>
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title>Demostración de PDO::query</title>
    <para>
     Una buena característica de <function>PDO::query</function> es que
     permite iterar sobre el conjunto de filas devueltos por una
     ejecución de una sentencia SELECT con éxito.
    </para>
    <programlisting role="php">
<![CDATA[
<?php
function getFruit($conn) {
    $sql = 'SELECT name, color, calories FROM fruit ORDER BY name';
    foreach ($conn->query($sql) as $row) {
        print $row['name'] . "\t";
        print $row['color'] . "\t";
        print $row['calories'] . "\n";
    }
}
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
apple   red     150
banana  yellow  250
kiwi    brown   75
lemon   yellow  25
orange  orange  300
pear    green   150
watermelon      pink    90
]]>
    </screen>
   </example>
  </para>
 </refsect1>


 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member><function>PDO::exec</function></member>
    <member><function>PDO::prepare</function></member>
    <member><function>PDOStatement::execute</function></member>
   </simplelist>
  </para>
 </refsect1>


</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: $ -->
<!-- EN-Revision: 300101 Maintainer: Alejandro Rodas Status: ready -->
<!-- Reviewed: no -->

<refentry xml:id="pdo.quote" xmlns="http://docbook.org/ns/docbook";>
 <refnamediv>
  <refname>PDO::quote</refname>
  <refpurpose>
   Entrecomilla una cadena para usarla en una consulta.
  </refpurpose>
 </refnamediv>
 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type>string</type><methodname>PDO::quote</methodname>
   <methodparam><type>string</type><parameter>string</parameter></methodparam>
   <methodparam choice="opt"><type>int</type><parameter>parameter_type</parameter><initializer>PDO::PARAM_STR</initializer></methodparam>
  </methodsynopsis>

  <para>
   <function>PDO::quote</function> entrecomilla la cadena de entrada (si es
   necesario) y escapa los caracteres especiales contenidos en la cadena, usando
   un estilo de entrecomillado apropiado para el driver subyatence.
  </para>
  <para>
   Si se usa esta función para construir sentencias SQL, se
   recomienda <emphasis>encarecidamente</emphasis> usar
   <function>PDO::prepare</function> para preparar las sentencias SQL con
   los parámetros bound en vez de usar <function>PDO::quote</function> para interpolar
   datos de usuario en la consulta SQL. Las sentencias preparadas con parámetros bound
   no son sólo más portables, más convenientes, inmunes a inyección SQL, sino que
   son mucho más rápidos de ejecutar que consultas interpoladas, y tanto en el lado del
   servidor como del cliente se puede cachear una forma compilada de la consulta.
  </para>
  <para>
   No todos los drivers PDO implementan este método (como ejemplo notable, PDO_ODBC).
   En su lugar, considerar el uso de sentencias preparadas.
  </para>
 </refsect1>
 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>string</parameter></term>
      <listitem>
       <para>
        La cadena para ser entrecomillada.
       </para>
      </listitem>
     </varlistentry>
    <varlistentry>
     <term><parameter>parameter_type</parameter></term>
      <listitem>
       <para>
        Proporciona una sugerencia del tipo de datos para los drivers que tengan 
        un estilo de entrecomillado alternativos.
       </para>
      </listitem>
     </varlistentry>
   </variablelist>
  </para>
 </refsect1>
 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   Devuelve una cadena entrecomillada teóricamente segura para pasar a una
   sentencia SQL. Devuelve &false; si el criver no soporta el entrecomillado
   de esta forma.
  </para>
 </refsect1>

 <!-- Use when ERRORS exist
 <refsect1 role="errors">
  &reftitle.errors;
  <para>
   When does this function throw E_* level errors, or exceptions?
  </para>
 </refsect1>
 -->

 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title>Entrecomillar una cadena normal</title>
    <programlisting role="php">
<![CDATA[
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');

/* Cadena simple */
$string = 'Nice';
print "Unquoted string: $string\n";
print "Quoted string: " . $conn->quote($string) . "\n";
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
Unquoted string: Nice
Quoted string: 'Nice'
]]>
    </screen>
   </example>
   <example>
    <title>Entrecomillar una cadena peligrosa</title>
    <programlisting role="php">
<![CDATA[
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');

/* Cadena peligrosa */
$string = 'Naughty \' string';
print "Unquoted string: $string\n";
print "Quoted string:" . $conn->quote($string) . "\n";
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
Unquoted string: Naughty ' string
Quoted string: 'Naughty '' string'
]]>
    </screen>
   </example>
   <example>
    <title>Entrecomillando una cadena compleja</title>
    <programlisting role="php">
<![CDATA[
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');

/* Cadena compleja */
$string = "Co'mpl''ex \"st'\"ring";
print "Unquoted string: $string\n";
print "Quoted string: " . $conn->quote($string) . "\n";
?>
]]>
    </programlisting>
    &example.outputs;
    <screen>
<![CDATA[
Unquoted string: Co'mpl''ex "st'"ring
Quoted string: 'Co''mpl''''ex "st''"ring'
]]>
    </screen>
   </example>
  </para>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member><function>PDO::prepare</function></member>
    <member><function>PDOStatement::execute</function></member>
   </simplelist>
  </para>
 </refsect1>

</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

Reply via email to