db2_execute

(PECL ibm_db2 >= 1.0.0)

db2_execute — 준비된 SQL 문을 실행합니다.


설명

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

db2_execute()db2_prepare()에 의해 준비된 SQL 문을 실행합니다.

SQL 문이 결과 집합(예: SELECT 문 또는 하나 이상의 결과 집합을 반환하는 저장 프로시저에 대한 CALL)을 반환하는 경우 db2_fetch_assoc(), db2_fetch_both()를 사용하여 stmt 리소스에서 배열로 행을 검색할 수 있습니다. 또는 db2_fetch_array(). 또는 db2_fetch_row()를 사용하여 결과 집합 포인터를 다음 행으로 이동하고 db2_result()로 해당 행에서 한 번에 열을 가져올 수 있습니다.

db2_exec() 대신 db2_prepare()db2_execute()를 사용할 때의 이점에 대한 간략한 설명은 db2_prepare()를 참조하십시오.


매개변수

stmt
db2_prepare()에서 리턴된 준비된 명령문.
parameters
준비된 명령문에 포함된 매개변수 표시문자와 일치하는 입력 매개변수의 배열입니다.

반환 값

성공하면 true를, 실패하면 false를 반환합니다.


Examples

예제 #1 매개변수 마커가 있는 SQL 문 준비 및 실행

다음 예는 4개의 매개변수 표시문자를 승인하는 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.";
    }
}
?>
                  
                

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

Successfully added new pet.
                

예제 #2 OUT 매개변수를 사용하여 저장 프로시저 호출

다음 예는 OUT 매개변수를 나타내는 하나의 매개변수 표시문자를 받아들이는 CALL 문을 준비하고 db2_bind_param()을 사용하여 PHP 변수 $my_pets를 매개변수에 바인드한 다음 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!";
?>
                 
               

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

I have 7 pets!
               

예제 #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 = ?
    ';

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

?>
                
              

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

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 = ?
';

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

?>
               
             

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

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 = ?
';

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

?>
              
            

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

<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() - 결과 집합의 행에서 단일 열을 반환합니다.