PHP8 db2_set_option
(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_BINARY
ibm_db2.binmode=1
php.ini传递指定 二进制数据将转换为十六进制编码, 并将按原样退回。这相当于 设置在 中。
DB2_CONVERT
ibm_db2.binmode=2
php.ini传递指定 二进制数据将转换为
null
。这是 等效于 中的设置。DB2_PASSTHRU
ibm_db2.binmode=3
php.inidb2_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_ONLY
SQL_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_ON | X | - | - |
自动提交 | DB2_AUTOCOMMIT_OFF | X | - | - |
光标 | DB2_SCROLLABLE | - | X | - |
光标 | DB2_FORWARD_ONLY | - | X | - |
binmode | DB2_BINARY | X | X | - |
binmode | DB2_CONVERT | X | X | - |
binmode | DB2_PASSTHRU | X | X | - |
db2_attr_case | DB2_CASE_LOWER | X | X | - |
db2_attr_case | DB2_CASE_UPPER | X | X | - |
db2_attr_case | DB2_CASE_NATURAL | X | X | - |
deferred_prepare | DB2_DEFERRED_PREPARE_ON | - | X | - |
deferred_prepare | DB2_DEFERRED_PREPARE_OFF | - | X | - |
i5_fetch_only | DB2_I5_FETCH_ON | - | X | - |
i5_fetch_only | DB2_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_USERID | X | X | - |
acctstr | SQL_ATTR_INFO_ACCTSTR | X | X | - |
ApplName | SQL_ATTR_INFO_APPLNAME | X | X | - |
wrkstnname | SQL_ATTR_INFO_WRKSTNNAME | X | X | - |
返回值
成功时返回 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() - 返回语句资源使用的游标类型