一个简单的 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 语句时遇到问题,我发现您不能在连接上设置可滚动选项。以下代码(尝试获取第 2 条记录)
<?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 行出现获取失败
实际上,即使您在连接和 prepare 上都设置了选项,您的 fetch 也不会起作用。您必须仅在 prepare 上设置该选项。
如果您遇到以下错误消息:PHP Warning: db2_prepare() [<a href='function.db2-prepare'>function.db2-prepare</a>]: Statement Prepare Failed in (....)
并且无法使用 db2_stmt_errormsg() 显示错误消息,请检查您的数据库连接句柄是否(仍然)有效。