Zend_Db_Statement.xml 16 KB

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