A simple select example.
$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() は、プリペアドステートメントを作成します。
このプリペアドステートメントには、入力パラメータ・出力パラメータ
あるいは入出力パラメータを表すパラメータマーカ (?)
を含めることができます。プリペアドステートメントにパラメータを渡すには
db2_bind_param() を使用します。
入力パラメータの場合についてのみ、db2_execute()
に渡す配列で指定することも可能です。
アプリケーション内でプリペアドステートメントを使用する利点は、 以下の 3 つです。
connectionstatementoptions
SQL 文のパースに成功し、データベースサーバー内で正しく準備された場合に
ステートメントリソースを返します。データベースサーバーがエラーを返した場合に
false を返します。返されたエラーの詳細を調べるには、
db2_stmt_error() あるいは db2_stmt_errormsg()
をコールします。
例1 パラメータマーカを使用した SQL 文の準備と実行
以下の例では、4 つのパラメータマーカを含む 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);
}
}
?>A simple select example.
$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]If you are having problems with scrollable cursors and the prepare statement, I've found that you cant set the scrollable option on the connection. The following code (which tries to get the 2nd record):
<?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);
?>
Will result in the following error:
Warning: db2_fetch_both() [function.db2-fetch-both]: Fetch Failure in dbtest.php on line 7
In fact, even if you set the options on both the connection and the prepare your fetch will not work. You must only set that option on the prepare.if you have the error message : PHP Warning: db2_prepare() [<a href='function.db2-prepare'>function.db2-prepare</a>]: Statement Prepare Failed in (....)
and cannot display the error message using db2_stmt_errormsg() , then check if your database connection handle is (still) valid