Zend_Db_Statement.xml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 17987 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.db.statement">
  5. <title>Zend_Db_Statement</title>
  6. <para> Además de algunos métodos convenientes tales como
  7. <methodname>fetchAll()</methodname> e
  8. <methodname>insert()</methodname> documentados en <xref
  9. linkend="zend.db.adapter"/> , puede usarse un objeto de declaración
  10. para obtener más opciones al ejecutar consultas y devolver conjuntos de
  11. resultados. Esta sección describe cómo obtener una instancia de un
  12. objeto de declaración y cómo usar sus métodos. </para>
  13. <para>
  14. <classname>Zend_Db_Statement</classname> está basado en el objeto
  15. PDOStatement en la extensión <ulink url="http://www.php.net/pdo">PHP
  16. Data Objects</ulink> . </para>
  17. <sect2 id="zend.db.statement.creating">
  18. <title>Creando una Declaración</title>
  19. <para> Típicamente, un objeto de declaración statement es devuelto por
  20. el método <methodname>query()</methodname> de la clase de Adaptador
  21. de la base de datos. Este método es un modo general de preparar una
  22. declaración <acronym>SQL</acronym> . El primer parámetro es un
  23. string conteniendo la declaración <acronym>SQL</acronym> . El
  24. segundo parámetro (opcional) es un array de valores para vincular
  25. posiciones de parámetros en el string <acronym>SQL</acronym> . </para>
  26. <example id="zend.db.statement.creating.example1">
  27. <title>Crear un objeto de declaración SQL con query()</title>
  28. <programlisting language="php"><![CDATA[
  29. $stmt = $db->query(
  30. 'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?',
  31. array('goofy', 'FIXED')
  32. );
  33. ]]></programlisting>
  34. </example>
  35. <para> El objeto de declaración corresponde a una declaración
  36. <acronym>SQL</acronym> que ha sido preparada y ejecutada una vez
  37. con valores vinculados especificados. Si la declaración fue una
  38. consulta SELECT u otro tipo de declaración que devuelve un conjunto
  39. de resultados, ahora estará lista para extraer resultados. </para>
  40. <para> Puede crear una declaración con su constructor, pero éste es un
  41. uso menos típico. No hay un método factory para crear el objeto, así
  42. que es necesario cargar una clase de declaración específica y llamar
  43. a su constructor. Pase el objeto Adaptador como el primer parámetro,
  44. y un string conteniendo la declaración <acronym>SQL</acronym> como
  45. el segundo parámetro. La declaración es preparada pero no ejecutada. </para>
  46. <example id="zend.db.statement.creating.example2">
  47. <title>Usando un constructor de declaración SQL</title>
  48. <programlisting language="php"><![CDATA[
  49. $sql = 'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?';
  50. $stmt = new Zend_Db_Statement_Mysqli($db, $sql);
  51. ]]></programlisting>
  52. </example>
  53. </sect2>
  54. <sect2 id="zend.db.statement.executing">
  55. <title>Ejecutando la declaración</title>
  56. <para> Necesita ejecutar un objeto de declaración si lo crea con el
  57. constructor, o si desea ejecutar la misma declaración varias veces.
  58. Use el método <methodname>execute()</methodname> del mismo objeto de
  59. declaración. El único parámetro es un array de valores a vincular a
  60. posiciones de parámetros en la declaración. </para>
  61. <para> Si usa <emphasis>parámetros posicionales</emphasis> , o los que
  62. están marcados por un signo de interrogación (
  63. <emphasis>?</emphasis> ), pase los valores de vinculación en un
  64. array plano. </para>
  65. <example id="zend.db.statement.executing.example1">
  66. <title>Ejecutar una declaración con parámetros posicionales</title>
  67. <programlisting language="php"><![CDATA[
  68. $sql = 'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?';
  69. $stmt = new Zend_Db_Statement_Mysqli($db, $sql);
  70. $stmt->execute(array('goofy', 'FIXED'));
  71. ]]></programlisting>
  72. </example>
  73. <para> Si usa <emphasis>parámetros nombrados</emphasis> , o los que son
  74. indicados por un string identificador precedido por un caracter de
  75. dos puntos ( <emphasis>:</emphasis> ), pase el valor en un array
  76. asociativo. Las claves de este array deben coincidir con el nombre
  77. de los parámetros. </para>
  78. <example id="zend.db.statement.executing.example2">
  79. <title>Ejecutando una declaración con parámetros nombrados</title>
  80. <programlisting language="php"><![CDATA[
  81. $sql = 'SELECT * FROM bugs WHERE ' .
  82. 'reported_by = :reporter AND bug_status = :status';
  83. $stmt = new Zend_Db_Statement_Mysqli($db, $sql);
  84. $stmt->execute(array(':reporter' => 'goofy', ':status' => 'FIXED'));
  85. ]]></programlisting>
  86. </example>
  87. <para> Las declaraciones <acronym>PDO</acronym> soportan tanto
  88. parámetros posicionales como parámetros nombrados, pero no ambos
  89. tipos en la misma declaración <acronym>SQL</acronym> . Algunas
  90. clases <classname>Zend_Db_Statement</classname> para extensiones
  91. no-PDO soportan solo un tipo de parámetro o el otro. </para>
  92. </sect2>
  93. <sect2 id="zend.db.statement.fetching">
  94. <title> Extrayendo Resultados de una declaración SELECT </title>
  95. <para> Puede llamar a métodos del objeto de declaración para obtener
  96. filas desde declaraciones <acronym>SQL</acronym> que producen
  97. conjuntos de resultados. SELECT, SHOW, DESCRIBE y EXPLAIN son
  98. ejemplos de declaraciones que producen un conjunto de resultados.
  99. INSERT, UPDATE, and DELETE son ejemplo de declaraciones que no
  100. producen un conjunto de resultados. Puede ejecutar las últimas
  101. declaraciones de <acronym>SQL</acronym> usando
  102. <classname>Zend_Db_Statement</classname> , pero no puede llamar
  103. a los métodos que extraen filas de resultados desde éste. </para>
  104. <sect3 id="zend.db.statement.fetching.fetch">
  105. <title>Extrayendo una Fila Simple desde un Conjunto de
  106. Resultados</title>
  107. <para> Para extraer una fila desde el conjunto de resultados, use el
  108. método <methodname>fetch()</methodname> del objeto de
  109. declaración. Los tres parámetros de este método son opcionales: </para>
  110. <itemizedlist>
  111. <listitem>
  112. <para>
  113. <emphasis>Estilo de Extracción</emphasis> es el primer
  114. parámetro. Éste controla la estructura en la que será
  115. devuelta la fila. Vea <xref
  116. linkend="zend.db.adapter.select.fetch-mode"/> para
  117. la descripción de un valor válido los correspondientes
  118. formatos de datos. </para>
  119. </listitem>
  120. <listitem>
  121. <para>
  122. <emphasis>Orientación del Cursor</emphasis> es el
  123. segundo parámetro. Por omisión es
  124. Zend_Db::FETCH_ORI_NEXT, lo cual simplemente significa
  125. que cada llamada a <methodname>fetch()</methodname>
  126. devuelve la siguiente fila del resultado, en el orden
  127. devuelto por el <acronym>RDBMS</acronym> . </para>
  128. </listitem>
  129. <listitem>
  130. <para>
  131. <emphasis>Compensación</emphasis> es el tercer
  132. parámetro. Si la orientación del cursor es
  133. Zend_Db::FETCH_ORI_ABS, entonces el offset es el número
  134. ordinal de las filas que devolver. Si la orientación del
  135. cursor es Zend_Db::FETCH_ORI_REL, entonces el offset es
  136. relativo a la posición del cursor antes de que
  137. <methodname>fetch()</methodname> fuera llamado.
  138. </para>
  139. </listitem>
  140. </itemizedlist>
  141. <para>
  142. <methodname>fetch()</methodname> devuelve
  143. <constant>FALSE</constant> si todas las filas del conjunto
  144. de resultados han sido extraídas. </para>
  145. <example id="zend.db.statement.fetching.fetch.example">
  146. <title>Usando fetch() en un bucle</title>
  147. <programlisting language="php"><![CDATA[
  148. $stmt = $db->query('SELECT * FROM bugs');
  149. while ($row = $stmt->fetch()) {
  150. echo $row['bug_description'];
  151. }
  152. ]]></programlisting>
  153. </example>
  154. <para> Vea también <ulink
  155. url="http://www.php.net/PDOStatement-fetch"
  156. >PDOStatement::fetch()</ulink> . </para>
  157. </sect3>
  158. <sect3 id="zend.db.statement.fetching.fetchall">
  159. <title>Extrayendo un Conjunto de Resultados completo</title>
  160. <para> Para extraer todas las filas de un resultado en un solo paso,
  161. use el método <methodname>fetchAll()</methodname> . Esto es
  162. equivalente a llamar al método <methodname>fetch()</methodname>
  163. en un bucle devolviendo todas las filas en una array. El método
  164. <methodname>fetchAll()</methodname> acepta 2 parámetros. El
  165. primero es el estilo de extracción, descrito anteriormente, y el
  166. segundo indica el número de la columa que devolver, cuando el
  167. estilo de extracción es Zend_Db::FETCH_COLUMN. </para>
  168. <example id="zend.db.statement.fetching.fetchall.example">
  169. <title>Usando fetchAll()</title>
  170. <programlisting language="php"><![CDATA[
  171. $stmt = $db->query('SELECT * FROM bugs');
  172. $rows = $stmt->fetchAll();
  173. echo $rows[0]['bug_description'];
  174. ]]></programlisting>
  175. </example>
  176. <para> Vea también <ulink
  177. url="http://www.php.net/PDOStatement-fetchAll"
  178. >PDOStatement::fetchAll()</ulink> . </para>
  179. </sect3>
  180. <sect3 id="zend.db.statement.fetching.fetch-mode">
  181. <title>Cambiando el Modo de extracción</title>
  182. <para> Por defecto, el objeto de declaración devuelve filas de un
  183. conjunto de resultados como array asociativo, mapeando los
  184. nombres de columnas a los valores de la columna. Se puede
  185. especificar un formato diferente para que la clase de
  186. declaración devuelva las filas, tal como se puede con la clase
  187. Adaptadora. Puede usar él método
  188. <methodname>setFetchMode()</methodname> para establecer el
  189. modo de extracción. Especifique el modo de extracción usando las
  190. constantes de la clase Zend_Db: FETCH_ASSOC, FETCH_NUM,
  191. FETCH_BOTH, FETCH_COLUMN, and FETCH_OBJ. Vea <xref
  192. linkend="zend.db.adapter.select.fetch-mode"/> para más
  193. información de estos modos. Llamadas subsiguientes a los métodos
  194. de la declaración <methodname>fetch()</methodname> o
  195. <methodname>fetchAll()</methodname> usan el modo de
  196. extracción especificado. </para>
  197. <example id="zend.db.statement.fetching.fetch-mode.example">
  198. <title>Configurando un modo de extracción</title>
  199. <programlisting language="php"><![CDATA[
  200. $stmt = $db->query('SELECT * FROM bugs');
  201. $stmt->setFetchMode(Zend_Db::FETCH_NUM);
  202. $rows = $stmt->fetchAll();
  203. echo $rows[0][0];
  204. ]]></programlisting>
  205. </example>
  206. <para> Vea también <ulink
  207. url="http://www.php.net/PDOStatement-setFetchMode"
  208. >PDOStatement::setFetchMode()</ulink> . </para>
  209. </sect3>
  210. <sect3 id="zend.db.statement.fetching.fetchcolumn">
  211. <title>Extrayendo una Única Columna desde un Conjunto de
  212. Resultados</title>
  213. <para> Para devolver una única columna de la siguiente fila del
  214. conjunto de resultados, use
  215. <methodname>fetchColumn()</methodname> . El parámetro
  216. opcional es el índice de la columna (integer), y por defecto es
  217. 0. Este método devuelve un valor escalar, o
  218. <constant>FALSE</constant> si todas las filas del conjunto
  219. de resultados han sido extraídas. </para>
  220. <para> Note que este método opera diferente que el método
  221. <methodname>fetchCol()</methodname> de la clase Adaptadora.
  222. El método <methodname>fetchColumn()</methodname> de una
  223. declaración devuelve un único valor desde una fila. El método
  224. <methodname>fetchCol()</methodname> de un adaptador devuelve
  225. un array de valores, tomados desde la primera columa de todas
  226. las del conjunto de resultados. </para>
  227. <example id="zend.db.statement.fetching.fetchcolumn.example">
  228. <title>Usando fetchColumn()</title>
  229. <programlisting language="php"><![CDATA[
  230. $stmt = $db->query('SELECT bug_id, bug_description, bug_status FROM bugs');
  231. $bug_status = $stmt->fetchColumn(2);
  232. ]]></programlisting>
  233. </example>
  234. <para> Vea también <ulink
  235. url="http://www.php.net/PDOStatement-fetchColumn"
  236. >PDOStatement::fetchColumn()</ulink> . </para>
  237. </sect3>
  238. <sect3 id="zend.db.statement.fetching.fetchobject">
  239. <title>Extrayendo una Fila como un Objeto</title>
  240. <para> Para extraer una fila desde un conjunto de resultados
  241. estructurado como un Objeto, use el método
  242. <methodname>fetchObject()</methodname> . Este método tiene 2
  243. parámetros opcionales. El primer parámetro es un string con el
  244. nombre de la clase del objeto que devolver; por defecto será
  245. 'stdClass'. El segundo parámetro es un array de valores que será
  246. pasado al constructor de la clase. </para>
  247. <example id="zend.db.statement.fetching.fetchobject.example">
  248. <title>Usando fetchObject()</title>
  249. <programlisting language="php"><![CDATA[
  250. $stmt = $db->query('SELECT bug_id, bug_description, bug_status FROM bugs');
  251. $obj = $stmt->fetchObject();
  252. echo $obj->bug_description;
  253. ]]></programlisting>
  254. </example>
  255. <para> Vea también <ulink
  256. url="http://www.php.net/PDOStatement-fetchObject"
  257. >PDOStatement::fetchObject()</ulink> . </para>
  258. </sect3>
  259. </sect2>
  260. <!--
  261. @todo: binding parameters is not working yet. <sect2 id="zend.db.statement.binding-param">
  262. <title>Binding PHP Variables to Parameters</title> <para> </para> <example
  263. id="zend.db.statement.binding-param.example"> <title>Binding parameters from PHP
  264. variables</title> <programlisting language="php"><![CDATA[
  265. <?php
  266. ]]></programlisting>
  267. </example> <para> See also <ulink
  268. url="http://www.php.net/PDOStatement-bindParam">PDOStatement::bindParam()</ulink>. </para>
  269. </sect2>
  270. -->
  271. <!--
  272. @todo: binding columns is not working yet. <sect2 id="zend.db.statement.binding-column">
  273. <title>Binding PHP Variables to Query Results</title> <para> </para> <example
  274. id="zend.db.statement.binding-column.example"> <title>Binding results to PHP
  275. variables</title>
  276. <programlisting language="php"><![CDATA[
  277. <?php
  278. ]]></programlisting>
  279. </example> <para> See also <ulink
  280. url="http://www.php.net/PDOStatement-bindColumn">PDOStatement::bindColumn()</ulink>. </para>
  281. </sect2>
  282. -->
  283. </sect1>