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 ...db2_execute
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
db2_execute
Референца за `function.db2-execute.php` со подобрена типографија и навигација.
db2_execute
("PECL ibm_db2" >= 1.0.0)
db2_execute — Извршува подготвена SQL изјава
= NULL
db2_execute() извршува SQL изјава што беше подготвена од db2_prepare().
Ако SQL изјавата враќа сет на резултати, на пример, изјава SELECT или повик до складирана процедура што враќа еден или повеќе множества на резултати, можете да извлечете ред како низа од stmt ресурс користејќи db2_fetch_assoc(),
db2_fetch_both(), или
db2_fetch_array(). Алтернативно, можете да користите
db2_fetch_row() за да го поместите покажувачот на множеството резултати на следниот ред и да извлечете една колона од тој ред со
db2_result().
мора да биде асоцијативен низ од асоцијативни низи во формат db2_prepare() за кратка дискусија за предностите од користењето db2_prepare() and db2_execute() отколку db2_exec().
Параметри
stmt- Подготвена изјава вратена од db2_prepare().
parameters- Низа од влезни параметри што одговараат на какви било маркерски параметри содржани во подготвената изјава.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Примери
Пример #1 Подготовка и извршување на SQL изјава со маркерски параметри
Следниот пример подготвува изјава INSERT што прифаќа четири маркерски параметри, а потоа итерира преку низа од низи што ги содржат влезните вредности што треба да се поминат до 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.";
}
}
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Successfully added new pet.
Пример #2 Повикување складирана процедура со OUT параметар
Следниот пример подготвува изјава CALL што прифаќа еден маркерски параметар што претставува OUT параметар, врзува PHP променлива
$my_pets на параметарот користејќи
db2_bind_param(), потоа издава
db2_execute() за да ја изврши изјавата CALL. Откако ќе се направи повикот до складираната процедура, вредноста на
$num_pets се менува за да ја одрази вредноста вратена од складираната процедура за тој 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!";
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
I have 7 pets!
Пример #3 Враќање XML податоци како SQL ResultSet
Следниот пример покажува како да се работи со документи складирани во XML колона користејќи ја базата на податоци SAMPLE. Користејќи многу едноставен SQL/XML, овој пример враќа некои од јазлите во XML документ во формат SQL ResultSet со кој повеќето корисници се запознаени.
<?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);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
1000 Kathy Smith 416-555-1358 1001 Kathy Smith 905-555-7258
Пример #4 Изведување "JOIN" со XML податоци
The following example works with documents stored in 2 different XML columns in the SAMPLE database. It creates 2 temporary tables from the XML documents from 2 different columns and returns an SQL ResultSet with information regarding shipping status for the customer.
<?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);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
1001 Kathy Smith 905-555-7258 5002 Shipped
Следниот пример работи со документи складирани во 2 различни XML колони во базата на податоци SAMPLE. Создава 2 привремени табели од XML документите од 2 различни колони и враќа SQL ResultSet со информации во врска со статусот на испорака за клиентот.
Пример #5 Враќање SQL податоци како дел од поголем XML документ
<?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);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
<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>
Види Исто така
- db2_exec() - Извршува SQL изјава директно
- db2_fetch_array() - Враќа низа, индексирана по позиција на колона, што претставува ред во сет на резултати
- db2_fetch_assoc() - Враќа низа, индексирана по име на колона, што претставува ред во сет на резултати
- db2_fetch_both() - Враќа низа, индексирана по име и позиција на колона, што претставува ред во сет на резултати
- db2_fetch_row() - Поставува покажувач на сет на резултати на следниот ред или бараниот ред
- db2_prepare() - Подготвува SQL изјава за извршување
- db2_result() - Враќа една колона од ред во сет на резултати