PHP8 db2_set_option

2024-04-08 10:14 更新

(PECL ibm_db2 >= 1.0.0)

db2_set_option — 设置连接或语句资源的选项

说明

db2_set_option(resource $resource, array $options, int $type): bool

设置语句资源或连接资源的选项。你 无法设置结果集资源的选项。

参数 

resource

从 db2_prepare() 返回的有效语句资源或从 () 返回的有效连接资源 从 db2_connect() 或 db2_pconnect() 返回。

options

包含有效语句或连接的关联数组 选项。此参数可用于更改自动提交值, 光标类型(可滚动或向前),并指定 列名(下列名、上列名或自然名)将出现在 结果集。

autocommit

通过转弯 自动提交为指定的连接资源。DB2_AUTOCOMMIT_ON

通过转弯 自动提交关闭指定的连接资源。DB2_AUTOCOMMIT_OFF

cursor

传递指定 语句资源的只进游标。这是 默认游标类型,并且所有数据库都支持 服务器。DB2_FORWARD_ONLY

传递指定 语句资源的可滚动游标。可滚动 游标允许在 非顺序顺序,但仅支持 IBM DB2 通用数据库数据库。DB2_SCROLLABLE

binmode

传递指定 二进制数据将按原样返回。这是默认设置 模式。这相当于在 中设置。DB2_BINARYibm_db2.binmode=1php.ini

传递指定 二进制数据将转换为十六进制编码, 并将按原样退回。这相当于 设置在 中。DB2_CONVERTibm_db2.binmode=2php.ini

传递指定 二进制数据将转换为 null。这是 等效于 中的设置。DB2_PASSTHRUibm_db2.binmode=3php.ini

db2_attr_case

传递指定 结果集的列名以小写形式返回。DB2_CASE_LOWER

传递指定 结果集的列名以大写形式返回。DB2_CASE_UPPER

传递指定 结果集的列名以 Natural 格式返回 箱。DB2_CASE_NATURAL

deferred_prepare

通过回合延迟 为指定的语句资源准备 on。DB2_DEFERRED_PREPARE_ON

通过回合延迟 为指定的语句资源准备 off。DB2_DEFERRED_PREPARE_OFF

ibm_db2版本 1.5.1 中提供了以下新的 i5/OS 选项 和以后。这些选项仅在 i5 系统上本机运行 PHP 和 ibm_db2 时适用。

i5_fetch_only

DB2_I5_FETCH_ON- 光标是只读的 并且不能用于定位更新或删除。这 是默认值,除非环境已设置为 。SQL_ATTR_FOR_FETCH_ONLYSQL_FALSE

DB2_I5_FETCH_OFF- 可以使用光标 用于定位的更新和删除。

以下新选项在 ibm_db2 版本 1.8.0 及更高版本中可用。

rowcount

DB2_ROWCOUNT_PREFETCH_ON- 客户可以要求 获取之前的完整行计数,这意味着 db2_num_rows() 返回所选行数 即使使用光标。ROLLFORWARD_ONLY

DB2_ROWCOUNT_PREFETCH_OFF- 客户端无法请求 提取之前的完整行计数。

ibm_db2版本 1.7.0 及更高版本中提供了以下新选项。

trusted_user

若要将用户切换到受信任的用户,请传递用户 ID (String) 作为此密钥的值的受信任用户。此选项可以 仅在连接资源上设置。若要使用此选项,请受信任 必须在连接资源上启用上下文。

trusted_password

与指定的用户对应的密码 (String) 通过trusted_user键。

ibm_db2版本 1.6.0 及更高版本中提供了以下新选项。 这些选项提供了有用的跟踪信息,可以在以下时间访问 使用 db2_get_option() 执行。

注意

设置每个选项中的值时,某些服务器可能无法处理 提供的整个长度,可能会截断该值。

确保正确转换每个选项中指定的数据 传输到主机系统时,仅使用字符 A 到 Z, 0 到 9,以及下划线 (_) 或句点 (.)。

userid

SQL_ATTR_INFO_USERID- 指向以 null 结尾的指针 用于标识发送到主机的客户端用户 ID 的字符串 使用 DB2 Connect 时的数据库服务器。

注意

DB2 for z/OS 和 OS/390 服务器最多支持 16 个字符的长度。 此 user-id 不要与身份验证 user-id 混淆,它用于 仅用于识别目的,不用于任何授权。

acctstr

SQL_ATTR_INFO_ACCTSTR- 指向以 null 结尾的指针 用于标识发送到 使用 DB2 Connect 时的主机数据库服务器。

注意

DB2 for z/OS 和 OS/390 服务器最多支持 200 个字符的长度。

applname

SQL_ATTR_INFO_APPLNAME- 指向以 null 结尾的指针 用于标识发送到 使用 DB2 Connect 时的主机数据库服务器。

注意

DB2 for z/OS 和 OS/390 服务器最多支持 32 个字符的长度。

wrkstnname

SQL_ATTR_INFO_WRKSTNNAME- 指向以 null 结尾的指针 用于标识发送到 使用 DB2 Connect 时的主机数据库服务器。

注意

DB2 for z/OS 和 OS/390 服务器最多支持 18 个字符的长度。

type

一个整数值,该值指定 传递到函数中。资源类型和此值 必须对应。

作为值传递指定 连接资源已传递到函数中。1

传递任何不等于 as 的整数 该值指定语句资源已 传递到函数中。1

下表指定了与哪些选项兼容 可用资源类型:

资源参数矩阵
钥匙价值资源类型
  连接陈述结果集
自动提交DB2_AUTOCOMMIT_ONX--
自动提交DB2_AUTOCOMMIT_OFFX--
光标DB2_SCROLLABLE-X-
光标DB2_FORWARD_ONLY-X-
binmodeDB2_BINARYXX-
binmodeDB2_CONVERTXX-
binmodeDB2_PASSTHRUXX-
db2_attr_caseDB2_CASE_LOWERXX-
db2_attr_caseDB2_CASE_UPPERXX-
db2_attr_caseDB2_CASE_NATURALXX-
deferred_prepareDB2_DEFERRED_PREPARE_ON-X-
deferred_prepareDB2_DEFERRED_PREPARE_OFF-X-
i5_fetch_onlyDB2_I5_FETCH_ON-X-
i5_fetch_onlyDB2_I5_FETCH_OFF-X-
行数DB2_ROWCOUNT_PREFETCH_ON-X-
行数DB2_ROWCOUNT_PREFETCH_OFF-X-
trusted_user<USER NAME> (String)X--
trusted_password<PASSWORD> (String)X--
乌塞里德SQL_ATTR_INFO_USERIDXX-
acctstrSQL_ATTR_INFO_ACCTSTRXX-
ApplNameSQL_ATTR_INFO_APPLNAMEXX-
wrkstnnameSQL_ATTR_INFO_WRKSTNNAMEXX-

返回值 

成功时返回 true, 或者在失败时返回 false。

示例 

示例 #1 使用连接资源设置一个参数

<?php
/* Database Connection Parameters */
$database = 'SAMPLE';
$hostname = 'localhost';
$port = 50000;
$protocol = 'TCPIP';
$username = 'db2inst1';
$password = 'ibmdb2';

/* Connection String */
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;";
$conn_string .= "HOSTNAME=$hostname;PORT=$port;PROTOCOL=$protocol;";
$conn_string .= "UID=$username;PWD=$password;";

/* Obtain Connection Resource */
$conn = db2_connect($conn_string, '', '');

/* Create the associative options array with valid key-value pairs */
$options = array('autocommit' => DB2_AUTOCOMMIT_ON);

/* Call the function using the correct resource, options array, and type values */
$result = db2_set_option($conn, $options, 1);

/* Check if all options could be set correctly */
if($result)
{
  echo 'Options Set Successfully';
}
else
{
  echo 'Could Not Set Options';
}
?>

以上示例会输出:

Options Set Successfully

示例 #2 使用连接资源设置多个参数

<?php
/* Database Connection Parameters */
$database = 'SAMPLE';
$hostname = 'localhost';
$port = 50000;
$protocol = 'TCPIP';
$username = 'db2inst1';
$password = 'ibmdb2';

/* Connection String */
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;";
$conn_string .= "HOSTNAME=$hostname;PORT=$port;PROTOCOL=$protocol;";
$conn_string .= "UID=$username;PWD=$password;";

/* Obtain Connection Resource */
$conn = db2_connect($conn_string, '', '');

/* Create the associative options array with valid key-value pairs */
$options = array('autocommit' => DB2_AUTOCOMMIT_OFF, 
                    'binmode' => DB2_PASSTHRU,
              'db2_attr_case' => DB2_CASE_UPPER,
                     'cursor' => DB2_SCROLLABLE);

/* Call the function using the correct resource, options array, and type values */
$result = db2_set_option($conn, $options, 1);

/* Check if all options could be set correctly */
if($result)
{
  echo 'Options Set Successfully';
}
else
{
  echo 'Could Not Set Options';
}
?>

以上示例会输出:

Options Set Successfully

示例 #3 使用无效键设置多个参数

<?php
/* Database Connection Parameters */
$database = 'SAMPLE';
$hostname = 'localhost';
$port = 50000;
$protocol = 'TCPIP';
$username = 'db2inst1';
$password = 'ibmdb2';

/* Connection String */
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;";
$conn_string .= "HOSTNAME=$hostname;PORT=$port;PROTOCOL=$protocol;";
$conn_string .= "UID=$username;PWD=$password;";

/* Obtain Connection Resource */
$conn = db2_connect($conn_string, '', '');

/* Create the associative options array with valid key-value pairs */
$options = array('autocommit' => DB2_AUTOCOMMIT_OFF, 
             'MY_INVALID_KEY' => DB2_PASSTHRU,
              'db2_attr_case' => DB2_CASE_UPPER,
                     'cursor' => DB2_SCROLLABLE);

/* Call the function using the correct resource, options array, and type values */
$result = db2_set_option($conn, $options, 1);

/* Check if all options could be set correctly */
if($result)
{
  echo 'Options Set Successfully';
}
else
{
  echo 'Could Not Set Options';
}
?>

以上示例会输出:

Could Not Set Options

示例 #4 设置多个参数的无效值

<?php
/* Database Connection Parameters */
$database = 'SAMPLE';
$hostname = 'localhost';
$port = 50000;
$protocol = 'TCPIP';
$username = 'db2inst1';
$password = 'ibmdb2';

/* Connection String */
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;";
$conn_string .= "HOSTNAME=$hostname;PORT=$port;PROTOCOL=$protocol;";
$conn_string .= "UID=$username;PWD=$password;";

/* Obtain Connection Resource */
$conn = db2_connect($conn_string, '', '');

/* Create the associative options array with valid key-value pairs */
$options = array('autocommit' => DB2_AUTOCOMMIT_OFF, 
                    'binmode' => 'INVALID_VALUE',
              'db2_attr_case' => DB2_CASE_UPPER,
                     'cursor' => DB2_SCROLLABLE);

/* Call the function using the correct resource, options array, and type values */
$result = db2_set_option($conn, $options, 1);

/* Check if all options could be set correctly */
if($result)
{
  echo 'Options Set Successfully';
}
else
{
  echo 'Could Not Set Options';
}
?>

以上示例会输出:

Could Not Set Options

示例 #5 使用连接资源和错误类型设置多个参数

<?php
/* Database Connection Parameters */
$database = 'SAMPLE';
$hostname = 'localhost';
$port = 50000;
$protocol = 'TCPIP';
$username = 'db2inst1';
$password = 'ibmdb2';

/* Connection String */
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;";
$conn_string .= "HOSTNAME=$hostname;PORT=$port;PROTOCOL=$protocol;";
$conn_string .= "UID=$username;PWD=$password;";

/* Obtain Connection Resource */
$conn = db2_connect($conn_string, '', '');

/* Create the associative options array with valid key-value pairs */
$options = array('autocommit' => DB2_AUTOCOMMIT_OFF, 
                    'binmode' => DB2_PASSTHRU,
              'db2_attr_case' => DB2_CASE_UPPER,
                     'cursor' => DB2_SCROLLABLE);

/* Call the function using the correct resource, options array, and the wrong type value */
$result = db2_set_option($conn, $options, 2);

/* Check if all options could be set correctly */
if($result)
{
  echo 'Options Set Successfully';
}
else
{
  echo 'Could Not Set Options';
}
?>

以上示例会输出:

Could Not Set Options

示例 #6 使用错误的资源设置多个参数

<?php
/* Database Connection Parameters */
$database = 'SAMPLE';
$hostname = 'localhost';
$port = 50000;
$protocol = 'TCPIP';
$username = 'db2inst1';
$password = 'ibmdb2';

/* Connection String */
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;";
$conn_string .= "HOSTNAME=$hostname;PORT=$port;PROTOCOL=$protocol;";
$conn_string .= "UID=$username;PWD=$password;";

/* Obtain Connection Resource */
$conn = db2_connect($conn_string, '', '');

/* Create the associative options array with valid key-value pairs */
$options = array('autocommit' => DB2_AUTOCOMMIT_OFF, 
                    'binmode' => DB2_PASSTHRU,
              'db2_attr_case' => DB2_CASE_UPPER,
                     'cursor' => DB2_SCROLLABLE);

$stmt = db2_prepare($conn, 'SELECT * FROM EMPLOYEE');

/* Call the function using the wrong resource, and the correct options array, and type values */
$result = db2_set_option($stmt, $options, 1);

/* Check if all options could be set correctly */
if($result)
{
  echo 'Options Set Successfully';
}
else
{
  echo 'Could Not Set Options';
}
?>

以上示例会输出:

Could Not Set Options

示例 #7 Putting it all together

<?php
/* Database Connection Parameters */
$database = 'SAMPLE';
$hostname = 'localhost';
$port = 50000;
$protocol = 'TCPIP';
$username = 'db2inst1';
$password = 'ibmdb2';

/* Connection String */
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;";
$conn_string .= "HOSTNAME=$hostname;PORT=$port;PROTOCOL=$protocol;";
$conn_string .= "UID=$username;PWD=$password;";

/* Obtain Connection Resource */
$conn = db2_connect($conn_string, '', '');

/* Create the associative options array with valid key-value pairs */
$options = array('db2_attr_case' => DB2_CASE_LOWER,
                        'cursor' => DB2_SCROLLABLE);

$stmt = db2_prepare($conn, 'SELECT * FROM EMPLOYEE WHERE EMPNO = ? OR EMPNO = ?');

/* Call the function using the correct resource, options array, and type values */
$option_result = db2_set_option($stmt, $options, 2);
$result = db2_execute($stmt, array('000130', '000140'));

/* Get Row 2 before Row 1 since Scrollable Cursor */
print_r(db2_fetch_assoc($stmt, 2));
print '<br /><br />';
print_r(db2_fetch_assoc($stmt, 1));

?>

以上示例会输出:

Array
(
    [empno] => 000140
    [firstnme] => HEATHER
    [midinit] => A
    [lastname] => NICHOLLS
    [workdept] => C01
    [phoneno] => 1793
    [hiredate] => 1976-12-15
    [job] => ANALYST
    [edlevel] => 18
    [sex] => F
    [birthdate] => 1946-01-19
    [salary] => 28420.00
    [bonus] => 600.00
    [comm] => 2274.00
)

Array
(
    [empno] => 000130
    [firstnme] => DELORES
    [midinit] => M
    [lastname] => QUINTANA
    [workdept] => C01
    [phoneno] => 4578
    [hiredate] => 1971-07-28
    [job] => ANALYST
    [edlevel] => 16
    [sex] => F
    [birthdate] => 1925-09-15
    [salary] => 23800.00
    [bonus] => 500.00
    [comm] => 1904.00
)

示例 #8 i5/OS 游标是只读的

<?php
  $conn = db2_connect("", "", "", array("i5_lib"=>"nobody"));
  $stmt = db2_prepare($conn, 'select * from names where first = ?');
  $name = "first2";
  db2_bind_param($stmt, 1, "name", DB2_PARAM_IN);
  $options = array("i5_fetch_only"=>DB2_I5_FETCH_ON);
  db2_set_option($stmt,$options,0);
  if (db2_execute($stmt)) {
    while ($row = db2_fetch_array($stmt)) {
      echo "{$row[0]} {$row[1]}";
    }
  }
?>

以上示例会输出:

first2 last2

参见 

  • db2_connect() - 返回与数据库的连接
  • db2_pconnect() - 返回与数据库的持久连接
  • db2_exec() - 直接执行 SQL 语句
  • db2_prepare() - 准备要执行的 SQL 语句
  • db2_cursor_type() - 返回语句资源使用的游标类型


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号