(PECL ibm_db2 >= 1.0.0)
db2_execute — Ejecutar una sentencia SQL preparada
$stmt
[, array $parameters
] ) : booldb2_execute() ejecuta una sentencia SQL que ha sido preparada por db2_prepare().
Si la sentencia SQL devuelve un bloque de resultados, por ejemplo, una sentencia SELECT o una llamada a un procedimiento que devuelve bloques de resultados, se puede extraer una fila como arreglo a partir del recurso stmt usando db2_fetch_assoc(), db2_fetch_both(), o db2_fetch_array(). Alternativamente, se puede usar db2_fetch_row() para mover el apuntador del resultado a la siguiente fila y extraer una columna de esa fila con db2_result().
En la función db2_prepare() se discuten brevementen las ventajas de utilizar db2_prepare() y db2_execute() en lugar de db2_exec().
stmt
La sentencia preparada devuelta por db2_prepare().
parameters
Un arreglo de parámetros de entrada que reemplazarán a los marcadores contenidos en la sentencia preparada.
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
Ejemplo #1 Preparando y ejecutando una sentencia SQL con marcadores de parámetros
El siguiente ejemplo prepara una sentencia INSERT que acepta cuatro marcadores de parámetros, después la ejecuta con db2_execute().
<?php
$pet = array(0, 'cat', 'Pook', 3.2);
$insert = 'INSERT INTO animals (id, breed, name, weight)
VALUES (?, ?, ?, ?)';
$stmt = db2_prepare($conn, $insert);
if ($stmt) {
$result = db2_execute($stmt, $pet);
if ($result) {
print "Successfully added new pet.";
}
}
?>
El resultado del ejemplo sería:
Successfully added new pet.
Ejemplo #2 Llamando a un procedimiento almacenado con un parámetro OUT
El siguiente ejemplo prepara una sentencia CALL que acepta un marcador de parámetro que representa al parámetro OUT, enlaza la variable de PHP $my_pets al parámetro utilizando db2_bind_param(), después utiliza db2_execute() para ejecutar la sentencia CALL. Después de que la llamada al procedimiento almacenado se ha hecho, el valor de $num_pets se actualiza con el valor devuelto por el procedimiento almacenado para ese parámetro OUT.
<?php
$num_pets = 0;
$res = db2_prepare($conn, "CALL count_my_pets(?)");
$rc = db2_bind_param($res, 1, "num_pets", DB2_PARAM_OUT);
$rc = db2_execute($res);
print "I have $num_pets pets!";
?>
El resultado del ejemplo sería:
I have 7 pets!
Ejemplo #3 Devolviendo datos XML como resultado SQL
El siguiente ejemplo demuestra como trabajar con documentos almacenados en una columna XML usando la base de datos SAMPLE. Por medio de SQL/XML, este ejemplo devuelve algunos nodos en un documento XML contendos en un resultado SQL.
<?php
$conn = db2_connect("SAMPLE", "db2inst1", "ibmdb2");
$query = 'SELECT * FROM XMLTABLE(
XMLNAMESPACES (DEFAULT \'http://posample.org\'),
\'db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo\'
COLUMNS
"CID" VARCHAR (50) PATH \'@Cid\',
"NAME" VARCHAR (50) PATH \'name\',
"PHONE" VARCHAR (50) PATH \'phone [ @type = "work"]\'
) AS T
WHERE NAME = ?
';
$stmt = db2_prepare($conn, $query);
$name = 'Kathy Smith';
if ($stmt) {
db2_bind_param($stmt, 1, "name", DB2_PARAM_IN);
db2_execute($stmt);
while($row = db2_fetch_object($stmt)){
printf("$row->CID $row->NAME $row->PHONE\n");
}
}
db2_close($conn);
?>
El resultado del ejemplo sería:
1000 Kathy Smith 416-555-1358 1001 Kathy Smith 905-555-7258
Ejemplo #4 Ejecutando un "JOIN" con datos XML
El siguiente ejemplo funciona con documentos almacenados en dos diferentes columnas XML en la base de datos SAMPLE. Crea dos tablas temporales de los documentos XML de las dos columnas y devuelve un resultado SQL con información acerca del estado de compra de un cliente.
<?php
$conn = db2_connect("SAMPLE", "db2inst1", "ibmdb2");
$query = '
SELECT A.CID, A.NAME, A.PHONE, C.PONUM, C.STATUS
FROM
XMLTABLE(
XMLNAMESPACES (DEFAULT \'http://posample.org\'),
\'db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo\'
COLUMNS
"CID" BIGINT PATH \'@Cid\',
"NAME" VARCHAR (50) PATH \'name\',
"PHONE" VARCHAR (50) PATH \'phone [ @type = "work"]\'
) as A,
PURCHASEORDER AS B,
XMLTABLE (
XMLNAMESPACES (DEFAULT \'http://posample.org\'),
\'db2-fn:xmlcolumn("PURCHASEORDER.PORDER")/PurchaseOrder\'
COLUMNS
"PONUM" BIGINT PATH \'@PoNum\',
"STATUS" VARCHAR (50) PATH \'@Status\'
) as C
WHERE A.CID = B.CUSTID AND
B.POID = C.PONUM AND
A.NAME = ?
';
$stmt = db2_prepare($conn, $query);
$name = 'Kathy Smith';
if ($stmt) {
db2_bind_param($stmt, 1, "name", DB2_PARAM_IN);
db2_execute($stmt);
while($row = db2_fetch_object($stmt)){
printf("$row->CID $row->NAME $row->PHONE $row->PONUM $row->STATUS\n");
}
}
db2_close($conn);
?>
El resultado del ejemplo sería:
1001 Kathy Smith 905-555-7258 5002 Shipped
Ejemplo #5 Devolviendo datos SQL como parte un documento XML más extenso
El siguiente ejemplo trabaja con una parte de los documentos PRODUCT.DESCRIPTION en la base de datos SAMPLE. Crea un documento XML que contiene descripciones del producto (datos XML) y precios (datos SQL).
<?php
$conn = db2_connect("SAMPLE", "db2inst1", "ibmdb2");
$query = '
SELECT
XMLSERIALIZE(
XMLQUERY(\'
declare boundary-space strip;
declare default element namespace "http://posample.org";
<promoList> {
for $prod in $doc/product
where $prod/description/price < 10.00
order by $prod/description/price ascending
return(
<promoitem> {
$prod,
<startdate> {$start} </startdate>,
<enddate> {$end} </enddate>,
<promoprice> {$promo} </promoprice>
} </promoitem>
)
} </promoList>
\' passing by ref DESCRIPTION AS "doc",
PROMOSTART as "start",
PROMOEND as "end",
PROMOPRICE as "promo"
RETURNING SEQUENCE)
AS CLOB (32000))
AS NEW_PRODUCT_INFO
FROM PRODUCT
WHERE PID = ?
';
$stmt = db2_prepare($conn, $query);
$pid = "100-100-01";
if ($stmt) {
db2_bind_param($stmt, 1, "pid", DB2_PARAM_IN);
db2_execute($stmt);
while($row = db2_fetch_array($stmt)){
printf("$row[0]\n");
}
}
db2_close($conn);
?>
El resultado del ejemplo sería:
<promoList xmlns="http://posample.org"> <promoitem> <product pid="100-100-01"> <description> <name>Snow Shovel, Basic 22 inch</name> <details>Basic Snow Shovel, 22 inches wide, straight handle with D-Grip</details> <price>9.99</price> <weight>1 kg</weight> </description> </product> <startdate>2004-11-19</startdate> <enddate>2004-12-19</enddate> <promoprice>7.25</promoprice> </promoitem> </promoList>