Zend_Db_Statement
Además de algunos métodos convenientes tales como
fetchAll()
e
insert()
documentados en
, puede usarse un objeto de declaración
para obtener más opciones al ejecutar consultas y
devolver conjuntos de
resultados. Esta sección describe cómo obtener una instancia de un
objeto de declaración y cómo usar sus métodos.
Zend_Db_Statement
está basado en el objeto PDOStatement en la extensión
PHP Data Objects
.
Creando una Declaración
Típicamente, un objeto de declaración statement es devuelto por el
método
query()
de la clase de Adaptador de la base de
datos.
Este método es un modo general de preparar
una declaración
SQL
.
El primer parámetro es un string conteniendo la declaración
SQL
.
El segundo parámetro (opcional) es un array de valores para
vincular posiciones de
parámetros en el string
SQL
.
Crear un objeto de declaración SQL con query()
query(
'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?',
array('goofy', 'FIXED')
);
]]>
El objeto de declaración corresponde a una declaración
SQL
que ha
sido preparada y ejecutada una vez con valores vinculados
especificados.
Si la
declaración fue una consulta SELECT u otro tipo de declaración
que devuelve un conjunto
de resultados, ahora estará lista para
extraer resultados.
Puede crear una declaración con su constructor, pero éste es un
uso menos típico. No hay
un método factory para crear el objeto,
así que es necesario cargar una clase de
declaración específica y llamar a su constructor.
Pase el objeto Adaptador como el primer
parámetro, y un string
conteniendo la declaración
SQL
como el segundo parámetro.
La declaración es preparada pero no ejecutada.
Usando un constructor de declaración SQL
Ejecutando la declaración
Necesita ejecutar un objeto de declaración si lo crea con el
constructor, o si desea
ejecutar la misma declaración varias veces.
Use el método
execute()
del mismo objeto de
declaración. El único parámetro es un array de valores a vincular a
posiciones de parámetros en la declaración.
Si usa
parámetros posicionales
, o los que
están marcados por un signo de interrogación (
?
), pase
los valores de vinculación en un array plano.
Ejecutar una declaración con parámetros posicionales
execute(array('goofy', 'FIXED'));
]]>
Si usa
parámetros nombrados
, o los que son
indicados por un string identificador precedido por un caracter de
dos
puntos (
:
), pase el valor en un array asociativo.
Las claves de este array deben coincidir con el
nombre de los
parámetros.
Ejecutando una declaración con parámetros nombrados
execute(array(':reporter' => 'goofy', ':status' => 'FIXED'));
]]>
Las declaraciones
PDO
soportan tanto parámetros posicionales como
parámetros nombrados, pero no ambos tipos en
la misma declaración
SQL
. Algunas clases
Zend_Db_Statement
para extensiones no-PDO
soportan solo un tipo de parámetro o el otro.
Extrayendo Resultados de una declaración
SELECT
Puede llamar a métodos del objeto de declaración para obtener filas
desde declaraciones
SQL
que producen conjuntos de resultados.
SELECT, SHOW, DESCRIBE y EXPLAIN son ejemplos de
declaraciones que
producen un conjunto de resultados.
INSERT, UPDATE, and DELETE son
ejemplo de declaraciones que
no producen un conjunto de resultados.
Puede ejecutar las
últimas declaraciones de
SQL
usando
Zend_Db_Statement
, pero no puede llamar a los métodos que extraen
filas de resultados desde éste.
Extrayendo una Fila Simple desde un Conjunto de Resultados
Para extraer una fila desde el conjunto de resultados,
use el método
fetch()
del objeto de declaración.
Los tres parámetros de este método son opcionales:
Estilo de Extracción
es el primer parámetro. Éste controla la estructura
en la que será devuelta
la fila.
Vea
para la descripción de un valor válido los
correspondientes formatos de
datos.
Orientación del Cursor
es el segundo parámetro. Por omisión es
Zend_Db::FETCH_ORI_NEXT, lo cual
simplemente significa
que cada llamada a
fetch()
devuelve la
siguiente fila del resultado, en el orden devuelto por
el
RDBMS
.
Compensación
es el
tercer parámetro.
Si la orientación del cursor es
Zend_Db::FETCH_ORI_ABS,
entonces el offset es el número ordinal
de las filas
que devolver.
Si la orientación del cursor es Zend_Db::FETCH_ORI_REL,
entonces el offset es relativo a la posición del
cursor antes de que
fetch()
fuera llamado.
fetch()
devuelve
FALSE
si todas las filas
del conjunto de resultados han sido extraídas.
Usando fetch() en un bucle
query('SELECT * FROM bugs');
while ($row = $stmt->fetch()) {
echo $row['bug_description'];
}
]]>
Vea también
PDOStatement::fetch()
.
Extrayendo un Conjunto de Resultados completo
Para extraer todas las filas de un resultado en un solo paso,
use el método
fetchAll()
. Esto es equivalente a
llamar al método
fetch()
en un bucle devolviendo
todas las filas en una array. El método
fetchAll()
acepta 2 parámetros. El primero es el estilo de extracción,
descrito anteriormente, y
el segundo indica el número de la
columa que devolver, cuando el estilo de extracción
es
Zend_Db::FETCH_COLUMN.
Usando fetchAll()
query('SELECT * FROM bugs');
$rows = $stmt->fetchAll();
echo $rows[0]['bug_description'];
]]>
Vea también
PDOStatement::fetchAll()
.
Cambiando el Modo de extracción
Por defecto, el objeto de declaración devuelve filas de un
conjunto de resultados
como array asociativo, mapeando los
nombres de columnas a los valores de la columna.
Se puede especificar un formato diferente para que la clase de
declaración devuelva
las filas, tal como se puede con la clase
Adaptadora. Puede usar él método
setFetchMode()
para establecer el modo de extracción. Especifique el modo de
extracción usando las
constantes de la clase
Zend_Db: FETCH_ASSOC, FETCH_NUM, FETCH_BOTH,
FETCH_COLUMN, and
FETCH_OBJ.
Vea
para más información de estos modos.
Llamadas subsiguientes a los métodos de la
declaración
fetch()
o
fetchAll()
usan el modo de
extracción especificado.
Configurando un modo de extracción
query('SELECT * FROM bugs');
$stmt->setFetchMode(Zend_Db::FETCH_NUM);
$rows = $stmt->fetchAll();
echo $rows[0][0];
]]>
Vea también
PDOStatement::setFetchMode()
.
Extrayendo una Única Columna desde un Conjunto de Resultados
Para devolver una única columna de la siguiente fila del
conjunto de resultados, use
fetchColumn()
. El
parámetro opcional es el índice de la columna (integer), y por
defecto es 0. Este
método devuelve un valor escalar, o
FALSE
si todas las filas del conjunto de resultados
han sido extraídas.
Note que este método opera diferente que el método
fetchCol()
de la clase Adaptadora.
El método
fetchColumn()
de una declaración devuelve
un único valor desde una fila.
El método
fetchCol()
de un adaptador devuelve un
array de valores, tomados desde la primera columa de
todas las
del conjunto de resultados.
Usando fetchColumn()
query('SELECT bug_id, bug_description, bug_status FROM bugs');
$bug_status = $stmt->fetchColumn(2);
]]>
Vea también
PDOStatement::fetchColumn()
.
Extrayendo una Fila como un Objeto
Para extraer una fila desde un conjunto de resultados
estructurado como un Objeto,
use el método
fetchObject()
. Este método tiene 2 parámetros
opcionales. El primer parámetro es un string con el
nombre de
la clase del objeto que devolver; por defecto será 'stdClass'. El segundo
parámetro es un array de valores que será pasado al
constructor de la clase.
Usando fetchObject()
query('SELECT bug_id, bug_description, bug_status FROM bugs');
$obj = $stmt->fetchObject();
echo $obj->bug_description;
]]>
Vea también
PDOStatement::fetchObject()
.