一個簡單的 select 範例。
$pr_stmt = db2_prepare ($this->conn,"select count(*) from note where city=? and year= ?");
db2_execute($pr_stmt,array('test',2016));
$count_res = db2_fetch_array($pr_stmt);
echo "Count =".$count_res[0]
(PECL ibm_db2 >= 1.0.0)
db2_prepare — 準備要執行的 SQL 陳述式
db2_prepare() 會建立一個已準備好的 SQL 陳述式,其中可以包含 0 個或多個參數標記(?
字元),代表輸入、輸出或輸入/輸出參數。您可以使用 db2_bind_param() 將參數傳遞給已準備好的陳述式,或者僅針對輸入值,以傳遞給 db2_execute() 的陣列形式傳遞。
在應用程式中使用已準備好的陳述式有三個主要優點:
效能:當您準備一個陳述式時,資料庫伺服器會建立一個最佳化的存取計劃,以便使用該陳述式擷取資料。後續使用 db2_execute() 發出已準備好的陳述式,可以讓陳述式重複使用該存取計劃,並避免為您發出的每個陳述式動態建立新存取計劃的額外負擔。
安全性:當您準備一個陳述式時,您可以包含輸入值的參數標記。當您使用佔位符的輸入值執行已準備好的陳述式時,資料庫伺服器會檢查每個輸入值,以確保其類型與欄位定義或參數定義相符。
進階功能:參數標記不僅可以讓您將輸入值傳遞給已準備好的 SQL 陳述式,還可以讓您使用 db2_bind_param() 從預存程序中擷取 OUT 和 INOUT 參數。
connection
由 db2_connect() 或 db2_pconnect() 傳回的有效資料庫連線資源變數。
statement
一個 SQL 陳述式,可選擇性地包含一個或多個參數標記。
options
包含陳述式選項的關聯式陣列。您可以使用此參數在支援此功能的資料庫伺服器上請求可捲動的游標。
有關有效陳述式選項的說明,請參閱 db2_set_option()。
如果 SQL 陳述式已成功由資料庫伺服器剖析和準備,則傳回陳述式資源。如果資料庫伺服器傳回錯誤,則傳回 false
。您可以透過呼叫 db2_stmt_error() 或 db2_stmt_errormsg() 來判斷傳回了哪個錯誤。
範例 #1 準備和執行帶有參數標記的 SQL 陳述式
以下範例準備一個接受四個參數標記的 INSERT 陳述式,然後逐一查看包含要傳遞給 db2_execute() 的輸入值的陣列。
<?php
$animals = array(
array(0, 'cat', 'Pook', 3.2),
array(1, 'dog', 'Peaches', 12.3),
array(2, 'horse', 'Smarty', 350.0),
);
$insert = 'INSERT INTO animals (id, breed, name, weight)
VALUES (?, ?, ?, ?)';
$stmt = db2_prepare($conn, $insert);
if ($stmt) {
foreach ($animals as $animal) {
$result = db2_execute($stmt, $animal);
}
}
?>
一個簡單的 select 範例。
$pr_stmt = db2_prepare ($this->conn,"select count(*) from note where city=? and year= ?");
db2_execute($pr_stmt,array('test',2016));
$count_res = db2_fetch_array($pr_stmt);
echo "Count =".$count_res[0]
如果您在使用可捲動的游標和 prepare 陳述式時遇到問題,我發現您無法在連線上設定可捲動選項。以下程式碼(嘗試取得第二筆記錄)
<?php
$sql = "SELECT * FROM SCHEMA.TABLENAME";
$options = array('cursor' => DB2_SCROLLABLE);
$conn = db2_connect($database, $user, $password,$options);
$stmt = db2_prepare($conn, $sql);
$result = db2_execute($stmt);
$row = db2_fetch_both($stmt, 2);
$conn = db2_connect($database, $user, $password);
$stmt = db2_prepare($conn, $sql, $options);
$result = db2_execute($stmt);
$row = db2_fetch_both($stmt, 2);
?>
會產生以下錯誤
警告:db2_fetch_both() [function.db2-fetch-both]: 在 dbtest.php 的第 7 行擷取失敗
事實上,即使您在連線和準備時都設定了選項,您的擷取操作也不會成功。您必須只在準備時設定該選項。
如果您遇到錯誤訊息:PHP 警告:db2_prepare() [<a href='function.db2-prepare'>function.db2-prepare</a>]: 陳述式準備失敗 於 (....)
而且無法使用 db2_stmt_errormsg() 顯示錯誤訊息,請檢查您的資料庫連線控制代碼是否(仍然)有效。