If you need to "emulate" offset/limit (as PEAR::DB puts it) for db2 queries, you will definitely need to add array('cursor' => DB2_SCROLLABLE) to your db2_exec() call. Otherwise, you will get nothing useful from db2_fetch_{whatever}() when you try to (see following hack for example):
<?php
$limit = 10;
$offset = 20;
for ($i = 0; $i < $limit && $row = db2_fetch_array($result, $offset + $i); $i++) {
// stuff goes here
}
?>
You can accomplish the same time of thing using sub-selects, "with" statements and other things new to me in the world of DB2, but the more dynamically generated the queries, the more difficult it gets to implement limit/offset behavior on the fly.db2_exec
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
db2_exec
Референца за `function.db2-exec.php` со подобрена типографија и навигација.
db2_exec
("PECL ibm_db2" >= 1.0.0)
db2_exec — Извршува SQL израз директно
= NULL
Извршува SQL израз директно.
Ако планирате да ги интерполирате PHP променливите во SQL изразот, разберете дека ова е една од почестите безбедносни изложености. Разгледајте го повикувањето на db2_prepare() за подготовка на SQL израз со маркер за параметри за влезни вредности. Потоа можете да го повикате db2_execute() за да ги поминете влезните вредности и да избегнете напади со SQL инјектирање.
Ако планирате да го издавате истиот SQL израз повеќепати со различни параметри, разгледајте го повикувањето на db2_prepare() and db2_execute() за да му овозможите на серверскиот дел на базата на податоци да го повторно користи својот план за пристап и да ја зголеми ефикасноста на пристапот до вашата база на податоци.
Параметри
connection- Валидна база на податоци врска ресурс променлива како вратена од db2_connect() or db2_pconnect().
statement- SQL израз. Изразот не смее да содржи маркери за параметри.
options- Асоцијативен список кој содржи опции за изразот. Можете да го користите овој параметар за да побарате курсор што може да се скрола на серверите на базите на податоци што ја поддржуваат оваа функционалност. За опис на валидни опции за изразот, видете db2_set_option().
Вратени вредности
Враќа ресурс за израз ако SQL изразот беше издаден успешно, или false ако базата на податоци не успеа да го изврши SQL изразот.
Примери
Пример #1 Создавање табела со db2_exec()
Следниот пример користи db2_exec() за издавање сет на DDL изрази во процесот на создавање табела.
<?php
$conn = db2_connect($database, $user, $password);
// Create the test table
$create = 'CREATE TABLE animals (id INTEGER, breed VARCHAR(32),
name CHAR(16), weight DECIMAL(7,2))';
$result = db2_exec($conn, $create);
if ($result) {
print "Successfully created the table.\n";
}
// Populate the test table
$animals = array(
array(0, 'cat', 'Pook', 3.2),
array(1, 'dog', 'Peaches', 12.3),
array(2, 'horse', 'Smarty', 350.0),
array(3, 'gold fish', 'Bubbles', 0.1),
array(4, 'budgerigar', 'Gizmo', 0.2),
array(5, 'goat', 'Rickety Ride', 9.7),
array(6, 'llama', 'Sweater', 150)
);
foreach ($animals as $animal) {
$rc = db2_exec($conn, "INSERT INTO animals (id, breed, name, weight)
VALUES ({$animal[0]}, '{$animal[1]}', '{$animal[2]}', {$animal[3]})");
if ($rc) {
print "Insert... ";
}
}
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Successfully created the table. Insert... Insert... Insert... Insert... Insert... Insert... Insert...
Пример #2 Извршување SELECT израз со курсор што може да се скрола
Следниот пример демонстрира како да побарате курсор што може да се скрола за SQL израз издаден од db2_exec().
<?php
$conn = db2_connect($database, $user, $password);
$sql = "SELECT name FROM animals
WHERE weight < 10.0
ORDER BY name";
if ($conn) {
require_once 'prepare.inc';
$stmt = db2_exec($conn, $sql, array('cursor' => DB2_SCROLLABLE));
while ($row = db2_fetch_array($stmt)) {
print "$row[0]\n";
}
}
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Bubbles Gizmo Pook Rickety Ride
Пример #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 = \'Kathy Smith\'
';
$stmt = db2_exec($conn, $query);
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 = \'Kathy Smith\'
';
$stmt = db2_exec($conn, $query);
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 = \'100-100-01\'
';
$stmt = db2_exec($conn, $query);
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_execute() - Извршува подготвена SQL изјава
- db2_prepare() - Подготвува SQL изјава за извршување