PHP 8.5.0 Alpha 1 available for testing

db2_execute

(PECL ibm_db2 >= 1.0.0)

db2_execute Ejecuta una consulta SQL preparada

Descripción

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

db2_execute() ejecuta una consulta SQL que ha sido preparada por db2_prepare().

Si la consulta SQL devuelve un conjunto de resultados, por ejemplo, una consulta SELECT o CALL a un procedimiento de registro devuelve uno o varios conjuntos de resultados, puede recuperar una fila como un array a partir de la recurso stmt utilizando db2_fetch_assoc(), db2_fetch_both() o db2_fetch_array(). Alternativamente, puede utilizar db2_fetch_row() para mover el puntero a la fila siguiente y recuperar una columna a la vez de esta fila con la función db2_result().

Consúltese db2_prepare() para una breve discusión sobre las ventajas de utilizar db2_prepare() y db2_execute() en lugar de db2_exec().

Parámetros

stmt

Una consulta preparada devuelta por db2_prepare().

parameters

Un array de parámetros de entrada que contiene los marcadores de variables contenidos en la consulta preparada.

Valores devueltos

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

Ejemplos

Ejemplo #1 Preparación y ejecución de una consulta SQL con marcadores

El siguiente ejemplo prepara una consulta INSERT que acepta cuatro marcadores, luego itera sobre el array que contiene los valores de entrada que será pasado a la función db2_execute().

<?php
$pet
= array(0, 'chat', 'Pook', 3.2);

$insert = 'INSERT INTO animales (id, raza, nombre, peso)
VALUES (?, ?, ?, ?)'
;

$stmt = db2_prepare($conn, $insert);
if (
$stmt) {
$result = db2_execute($stmt, $pet);
if (
$result) {
print
"Añadido un nuevo animal con éxito.";
}
}
?>

El resultado del ejemplo sería:

Añadido un nuevo animal con éxito.

Ejemplo #2 Llamada a un procedimiento de registro con un parámetro de SALIDA

El siguiente ejemplo prepara una consulta CALL que acepta un marcador que representa un parámetro de SALIDA, vincula la variable PHP $my_pets al parámetro utilizando la función db2_bind_param() y llama a la función db2_execute() para ejecutar la consulta CALL. Una vez que la consulta CALL ha sido ejecutada, el valor de $num_pets cambia para reflejar el valor devuelto por el procedimiento de registro para este parámetro de SALIDA.

<?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
"Tengo $num_pets animales !";
?>

El resultado del ejemplo sería:

Tengo 7 animales !

Ejemplo #3 Devuelve datos XML como ResultSet SQL

El siguiente ejemplo demuestra cómo utilizar documentos almacenados en una columna XML utilizando la base de datos SAMPLE. Utilizando un simple SQL/XML, este ejemplo devuelve algunos nodos en un documento XML en un formato ResultSet SQL con el que la mayoría de los usuarios están familiarizados.

<?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 Ejecutar un "JOIN" con datos XML

El siguiente ejemplo trabaja con documentos almacenados en dos columnas diferentes en la base de datos SAMPLE. Esto crea dos tablas temporales a partir de los documentos XML de dos diferentes columnas XML y devuelve un ResultSet SQL con la información que contiene el estado de envío para 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 Devuelve datos SQL que forman parte de un documento XML grande

El siguiente ejemplo utiliza una porción de los documentos de PRODUCT.DESCRIPTION en la base de datos SAMPLE. Esto crea un documento XML que contiene la descripción del producto (datos XML) y las informaciones concernientes al precio (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() - Ejecuta una consulta SQL directamente
  • db2_fetch_array() - Devuelve un array, indexado por la posición de las columnas, que representa una línea del conjunto de resultados
  • db2_fetch_assoc() - Devuelve un array, indexado por nombre de columna, que representa una fila del conjunto de resultados
  • db2_fetch_both() - Devuelve un array, indexado por nombre de columna y posición, que representa una fila del conjunto de resultados
  • db2_fetch_row() - Modifica el puntero del conjunto de resultados a la siguiente línea o a la línea solicitada
  • db2_prepare() - Prepara una consulta SQL para ser ejecutada
  • db2_result() - Devuelve un valor de una columna de una fila de un conjunto de resultados

add a note

User Contributed Notes 1 note

up
0
stefanov at uk dot ibm dot com
9 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