PHP 8.4.0 RC4 available for testing

db2_execute

(PECL ibm_db2 >= 1.0.0)

db2_execute Ejecutar una sentencia SQL preparada

Descripción

db2_execute(resource $stmt, array $parameters = ?): bool

db2_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().

Parámetros

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.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Ejemplos

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>

Ver también

  • db2_exec() - Ejecutar directamente una sentencia SQL
  • db2_fetch_array() - Devolver un arreglo, indexado por la posición de las columnas, que represanta una fila de un bloque de resultados
  • db2_fetch_assoc() - Devolver un arreglo, indexado por el nombre de las columnas, representando una fila del bloque de resultados
  • db2_fetch_both() - Devolver un arreglo, indexado por el nombre y por la posición de la columna, representando una fila de un bloque de resultados
  • db2_fetch_row() - Establecer el apuntador de los resultados hacia la siguiente fila o a la fila solicitada
  • db2_prepare() - Prepara un comando SQL para su ejecución
  • db2_result() - Devolver una columna específica del resultado

add a note

User Contributed Notes 1 note

up
0
stefanov at uk dot ibm dot com
8 years ago
You CANNOT bind parameters for table and/or column names. Binding parameters only works for values:

YES: $sqlQuery = "UPDATE ".TB_NAME." SET ".CN_NAME." = ? WHERE DAY = ?";
NO: $sqlQuery = "UPDATE ? SET ? = ? WHERE DAY = ?";

Any attempt to bind column or table names will result in the following error during db2_execute():
PHP Warning: db2_bind_param(): Describe Param Failed in ...
To Top