db2_prepare

(PECL ibm_db2 >= 1.0.0)

db2_prepare 准备要执行的 SQL 语句

说明

db2_prepare(resource $connection, string $statement, array $options = []): resource|false

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

参见

添加注释

用户贡献的注释 3 notes

0
agr dot valayam at gmail dot com
7 年前
一个简单的 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]
0
NormInNorman
14 年前
如果您在使用可滚动游标和 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 上设置该选项。
-2
ndt.db2 at google mail
18 年前
如果您遇到以下错误消息:PHP Warning: db2_prepare() [<a href='function.db2-prepare'>function.db2-prepare</a>]: Statement Prepare Failed in (....)
并且无法使用 db2_stmt_errormsg() 显示错误消息,请检查您的数据库连接句柄是否(仍然)有效。
To Top