db2_exec

(PECL ibm_db2 >= 1.0.0)

db2_exec — SQL 문을 직접 실행합니다.


설명

db2_exec(resource $connection, string $statement, array $options = ?): resource

SQL 문을 직접 실행합니다.

PHP 변수를 SQL 문에 삽입할 계획이라면 이것이 보다 일반적인 보안 노출 중 하나임을 이해하십시오. db2_prepare()를 호출하여 입력 값에 대한 매개변수 표시문자가 있는 SQL문을 준비하는 것을 고려하십시오. 그런 다음 db2_execute()를 호출하여 입력 값을 전달하고 SQL 주입 공격을 피할 수 있습니다.

다른 매개변수를 사용하여 동일한 SQL문을 반복적으로 발행하려는 경우 db2_prepare()db2_execute()를 호출하여 데이터베이스 서버가 액세스 계획을 재사용하고 데이터베이스 액세스 효율성을 높일 수 있도록 하십시오.


매개변수

connection
db2_connect() 또는 db2_pconnect()에서 리턴된 유효한 데이터베이스 연결 자원 변수.
statement
SQL 문. 명령문에는 매개변수 표시문자가 포함될 수 없습니다.
options
명령문 옵션을 포함하는 연관 배열입니다. 이 매개변수를 사용하여 이 기능을 지원하는 데이터베이스 서버에서 스크롤 가능한 커서를 요청할 수 있습니다.

유효한 명령문 옵션에 대한 설명은 db2_set_option()을 참조하십시오.


반환 값

SQL 문이 성공적으로 실행된 경우 명령문 리소스를 반환하고 데이터베이스가 SQL 문을 실행하지 못한 경우 false를 반환합니다.


Examples

예제 #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... ";
    }
}
?>
                  
                

위의 예는 다음을 출력합니다.

Successfully created the table.
Insert... Insert... Insert... Insert... Insert... Insert... Insert...
                

예제 #2 스크롤 가능한 커서로 SELECT 문 실행

다음 예는 db2_exec()에 의해 발행된 SQL문에 대해 스크롤 가능한 커서를 요청하는 방법을 보여줍니다.

                 
<?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";
    }
}
?>
                 
               

위의 예는 다음을 출력합니다.

Bubbles
Gizmo
Pook
Rickety Ride
               

예제 #3 XML 데이터를 SQL ResultSet으로 반환

다음 예는 SAMPLE 데이터베이스를 사용하여 XML 컬럼에 저장된 문서로 작업하는 방법을 보여줍니다. 이 예제는 매우 간단한 SQL/XML을 사용하여 대부분의 사용자에게 친숙한 SQL ResultSet 형식으로 XML 문서의 일부 노드를 반환합니다.

                
<?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);

?>
                
              

위의 예는 다음을 출력합니다.

1000     Kathy Smith     416-555-1358
1001     Kathy Smith     905-555-7258
              

예제 #4 XML 데이터로 "JOIN" 수행

다음 예는 SAMPLE 데이터베이스의 서로 다른 2개의 XML 열에 저장된 문서에 대해 작동합니다. 2개의 다른 열에서 XML 문서에서 2개의 임시 테이블을 생성하고 고객의 배송 상태에 관한 정보가 포함된 SQL ResultSet을 반환합니다.

               
<?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);

?>
               
             

위의 예는 다음을 출력합니다.

1001     Kathy Smith     905-555-7258     5002     Shipped
             

예제 #5 더 큰 XML 문서의 일부로 SQL 데이터 반환

다음 예는 SAMPLE 데이터베이스에 있는 PRODUCT.DESCRIPTION 문서의 일부에 대해 작동합니다. 제품 설명(XML 데이터) 및 가격 정보(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);

?>
              
            

위의 예는 다음을 출력합니다.

<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>
            

기타