PHP Conference Japan 2024

db2_prepare

(PECL ibm_db2 >= 1.0.0)

db2_prepare 准备要执行的 SQL 语句

描述

db2_prepare(资源 $connection, 字符串 $statement, 数组 $options = []): 资源|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 条注释

agr dot valayam at gmail dot com
8 年前
一个简单的 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]
NormInNorman
15 年前
如果您在使用可滚动游标和 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 行发生提取失败

事实上,即使您在连接和准备阶段都设置了选项,您的提取操作也不会生效。您必须仅在准备阶段设置该选项。
ndt.db2 at google mail
18 年前
如果您遇到以下错误消息:PHP 警告:db2_prepare() [<a href='function.db2-prepare'>function.db2-prepare</a>]:语句准备失败 (……)
并且无法使用 db2_stmt_errormsg() 显示错误消息,请检查您的数据库连接句柄是否(仍然)有效。
To Top