Zend_Db_Statement.xml 18 KB

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