(PECL ibm_db2 >= 1.0.0)
db2_execute — Executa uma instrução SQL preparada
db2_execute() executa uma instrução SQL que foi preparada por db2_prepare().
Se a instrução SQL retornar um conjunto de resultados, por exemplo, uma instrução SELECT
ou uma CALL para um procedimento armazenado que retorna um ou mais conjuntos de resultados,
pode ser recuperada uma linha como um array a partir do recurso stmt
usando db2_fetch_assoc(),
db2_fetch_both() ou
db2_fetch_array(). Como alternativa, pode ser usada a função
db2_fetch_row() para mover o ponteiro do conjunto de resultados para a
próxima linha e buscar uma coluna por vez dessa linha com
db2_result().
Consulte db2_prepare() para uma breve discussão sobre as vantagens de usar db2_prepare() e db2_execute() em vez de db2_exec().
stmt
Uma instrução preparada retornada de db2_prepare().
parameters
Um array de parâmetros de entrada que correspondem a quaisquer marcadores de parâmetros contidos na instrução preparada.
Exemplo #1 Preparando e executando uma instrução SQL com marcadores de parâmetros
O exemplo a seguir prepara uma instrução INSERT que aceita quatro marcadores de parâmetros e, em seguida, itera sobre um array de arrays contendo os valores de entrada a serem passados para 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 "Novo animal de estimação adicionado com sucesso.";
}
}
?>
O exemplo acima produzirá:
Novo animal de estimação adicionado com sucesso.
Exemplo #2 Chamando um procedimento armazenado com um parâmetro OUT
O exemplo a seguir prepara uma instrução CALL que aceita um
marcador de parâmetro representando um parâmetro OUT, vincula a variável PHP
$my_pets
ao parâmetro usando
db2_bind_param(), então emite
db2_execute() para executar a instrução CALL. Após a
CHAMADA para o procedimento armazenado ter sido feita, o valor de
$num_pets
muda para refletir o valor retornado pelo
procedimento armazenado para aquele 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!";
?>
O exemplo acima produzirá:
I have 7 pets!
Exemplo #3 Retornando dados XML como um ResultSet SQL
O exemplo a seguir demonstra como trabalhar com documentos armazenados em uma coluna XML usando o banco de dados SAMPLE. Usando um pouco de SQL/XML bem simples, este exemplo retorna alguns dos nós em um documento XML em um formato SQL ResultSet com o qual a maioria dos usuários está familiarizada.
<?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);
?>
O exemplo acima produzirá:
1000 Kathy Smith 416-555-1358 1001 Kathy Smith 905-555-7258
Exemplo #4 Executando um "JOIN" com dados XML
O exemplo a seguir funciona com documentos armazenados em 2 colunas XML diferentes no banco de dados SAMPLE. Ele cria 2 tabelas temporárias dos documentos XML de 2 colunas diferentes e retorna um SQL ResultSet com informações sobre o status de envio para o 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);
?>
O exemplo acima produzirá:
1001 Kathy Smith 905-555-7258 5002 Shipped
Exemplo #5 Retornando dados SQL como parte de um documento XML maior
O exemplo a seguir funciona com uma parte dos documentos PRODUCT.DESCRIPTION no banco de dados SAMPLE. Ele cria um documento XML contendo descrição do produto (dados XML) e informações de preço (dados 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);
?>
O exemplo acima produzirá:
<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>