PHP8 db2_connect
(PECL ibm_db2 >= 1.0.0)
db2_connect — 返回与数据库的连接
说明
db2_connect(
string $database,
?string $username,
?string $password,
array $options = []
): resource|false
创建与 IBM DB2 通用数据库、IBM Cloudscape 和IBM DB2 Universal Database(IBM Cloudscape)的新连接。 或 Apache Derby 数据库。
参数
database
对于与数据库的编目连接,表示 DB2 客户机目录中的数据库别名。
database
对于与数据库的未编目连接,表示完整连接 字符串格式如下:
database
DATABASE=
其中参数表示以下值:database
;HOSTNAME=hostname
;PORT=port
;PROTOCOL=TCPIP;UID=username
;PWD=password
;database
数据库的名称。
hostname
数据库服务器的主机名或 IP 地址。
port
数据库侦听的 TCP/IP 端口 请求。
username
您用于连接到 数据库。
password
用于连接到数据库的密码。
username
用于连接到数据库的用户名。
对于未编目的连接,必须传递
null
值或空值 字符串。password
用于连接到数据库的密码。
对于未编目的连接,必须传递
null
值或空值 字符串。options
影响行为的关联连接选项数组 ,其中有效的数组键包括:
autocommit
传递值转弯 为此连接句柄打开自动提交。
DB2_AUTOCOMMIT_ON
传递值转弯 此连接句柄的自动提交关闭。
DB2_AUTOCOMMIT_OFF
DB2_ATTR_CASE
传递该值指定 该列名以自然大小写返回。
DB2_CASE_NATURAL
传递该值指定 该列名以小写形式返回。
DB2_CASE_LOWER
传递该值指定 该列名称以大写形式返回。
DB2_CASE_UPPER
CURSOR
传递该值指定 语句资源的只进游标。这是默认设置 游标类型,并且在所有数据库服务器上都受支持。
DB2_FORWARD_ONLY
传递该值指定 语句资源的可滚动游标。此模式启用 随机访问结果集中的行,但目前支持 仅由 IBM DB2 通用数据库提供。
DB2_SCROLLABLE
以下新选项在 ibm_db2 版本 1.7.0 及更高版本中可用。
trustedcontext
传递DB2_TRUSTED_CONTEXT_ENABLE值可转换为受信任的上下文 对于此连接句柄,请打开。不能使用 db2_set_option() 设置此参数。
仅当数据库已编目时,此键才有效(即使 database is local),或者在创建时指定完整的 DSN 连接。
若要对数据库进行编目,请使用以下命令:
db2 catalog tcpip node loopback remote <SERVERNAME> server <SERVICENAME> db2 catalog database <LOCALDBNAME> as <REMOTEDBNAME> at node loopback db2 "update dbm cfg using svcename <SERVICENAME>" db2set DB2COMM=TCPIP
ibm_db2版本 1.5.1 中提供了以下新的 i5/OS 选项 和以后。
i5_lib
一个字符值,该值指示将 用于解析不合格的文件引用。这是无效的 如果连接使用系统命名模式。
i5_naming
DB2_I5_NAMING_ON
value 打开 DB2 UDB CLI iSeries 系统命名模式。使用斜杠 (/) 分隔符限定文件。 使用作业的库列表解析不合格的文件。DB2_I5_NAMING_OFF
value 关闭 DB2 UDB CLI 缺省值 命名模式,即 SQL 命名。使用句点 (.) 限定文件 定界符。使用默认库解析不合格的文件 或当前用户 ID。i5_commit
该属性应设置在 db2_connect() 之前。如果在 连接已建立,并且连接是远程数据 source,则更改在连接句柄的下一个成功 db2_connect() 之前不会生效。
i5_commit
注意:
php.ini设置 ==0 或者是默认值,但可能是 被选项覆盖。
ibm_db2.i5_allow_commit
DB2_I5_TXN_NO_COMMIT
i5_commit
DB2_I5_TXN_NO_COMMIT
- 不使用承诺控制。DB2_I5_TXN_READ_UNCOMMITTED
- 脏读,不可重复 读取,幻影是可能的。DB2_I5_TXN_READ_COMMITTED
- 无法进行脏读。 不可重复的读取和幻像是可能的。DB2_I5_TXN_REPEATABLE_READ
- 脏读和不可重复 无法读取。幻影是可能的。DB2_I5_TXN_SERIALIZABLE
- 事务是可序列化的。 无法进行脏读取、不可重复读取和幻像i5_query_optimize
DB2_FIRST_IO
所有查询都经过优化,目标是 尽快返回输出的第一页。这个目标效果很好 当输出由最有可能取消查询的用户控制时 查看输出数据的第一页后。使用 OPTIMIZE FOR nnn ROWS 子句遵循子句指定的目标。DB2_ALL_IO
所有查询都经过优化,目标是运行 在最短的时间内完成整个查询。这是一个 当查询的输出被写入文件或报表时,这是一个很好的选项,或者 接口正在对输出数据进行排队。使用 OPTIMIZE FOR nnn 编码的查询 ROWS 子句遵循子句指定的目标。这是默认设置。i5_dbcs_alloc
DB2_I5_DBCS_ALLOC_ON
value 打开 DB2 6X 分配方案 用于 DBCS 转换列大小的增长。DB2_I5_DBCS_ALLOC_OFF
value 关闭 DB2 6X 分配方案 用于 DBCS 转换列大小的增长。注意:php.ini设置 ==0 或为默认值,但可能会被覆盖 替换为选项。
ibm_db2.i5_dbcs_alloc
DB2_I5_DBCS_ALLOC_OFF
i5_dbcs_alloc
i5_date_fmt
DB2_I5_FMT_ISO
- 国际标准化组织 使用 (ISO) 日期格式 yyyy-mm-dd。这是默认设置。DB2_I5_FMT_USA
- 使用美国日期格式 mm/dd/yyyy。DB2_I5_FMT_EUR
- 使用欧洲日期格式 dd.mm.yyyy。DB2_I5_FMT_JIS
- 日本工业标准日期格式 使用 YYYY-MM-DD。DB2_I5_FMT_MDY
- 使用日期格式 mm/dd/yyyy。DB2_I5_FMT_DMY
- 使用日期格式 dd/mm/yyyy。DB2_I5_FMT_YMD
- 使用日期格式 yy/mm/dd。DB2_I5_FMT_JUL
- 使用儒略日期格式 yy/ddd。DB2_I5_FMT_JOB
- 使用作业默认值。i5_date_sep
DB2_I5_SEP_SLASH
- 斜杠 ( / ) 用作日期分隔符。 这是默认设置。DB2_I5_SEP_DASH
- 短划线 ( - ) 用作日期分隔符。DB2_I5_SEP_PERIOD
- 句点 ( . ) 用作日期 分隔符。DB2_I5_SEP_COMMA
- 逗号 ( , ) 用作日期分隔符。DB2_I5_SEP_BLANK
- 空白用作日期分隔符。DB2_I5_SEP_JOB
- 使用作业默认值i5_time_fmt
DB2_I5_FMT_ISO
- 国际组织 使用标准化 (ISO) 时间格式 hh.mm.ss。这是默认设置。DB2_I5_FMT_USA
- 美国时间格式 使用 hh:mmxx,其中 xx 是 AM 或 PM。DB2_I5_FMT_EUR
- 欧洲时间格式 hh.mm.ss 被使用。DB2_I5_FMT_JIS
- 日本工业标准 使用时间格式 HH:MM:SS。DB2_I5_FMT_HMS
- 使用 hh:mm:ss 格式。i5_time_sep
DB2_I5_SEP_COLON
- 冒号 ( : ) 用作时间 分隔符。这是默认设置。DB2_I5_SEP_PERIOD
- 句点 ( . ) 用作时间 分隔符。DB2_I5_SEP_COMMA
- 使用逗号 ( , ) 作为时间 分隔符。DB2_I5_SEP_BLANK
- 空白用作时间分隔符。DB2_I5_SEP_JOB
- 使用作业默认值。i5_decimal_sep
DB2_I5_SEP_PERIOD
- 句点 ( . ) 用作 小数点分隔符。这是默认设置。DB2_I5_SEP_COMMA
- 逗号 ( , ) 用作 小数分隔符。DB2_I5_SEP_JOB
- 使用作业默认值。
以下新的 i5/OS 选项在 ibm_db2 版本 1.8.0 中可用 和以后。
i5_libl
一个字符值,该值指示将用于 解析不合格的文件引用。指定库列表 用空格分隔的元素 'i5_libl'=>“MYLIB YOURLIB ANYLIB”。
注意:
i5_libl
调用 qsys2/qcmdexc('cmd',cmdlen),它只 在 i5/OS V5R4 及更高版本中可用。
返回值
如果连接尝试为 成功的。如果连接尝试失败,db2_connect() 将返回 false。
示例
示例 #1 创建编目连接
编目连接要求您之前已对目标进行编目 通过 DB2 命令行处理器 (CLP) 或 DB2 的数据库 配置助手。
<?php
$database = 'SAMPLE';
$user = 'db2inst1';
$password = 'ibmdb2';
$conn = db2_connect($database, $user, $password);
if ($conn) {
echo "Connection succeeded.";
db2_close($conn);
}
else {
echo "Connection failed.";
}
?>
以上示例会输出:
Connection succeeded.
示例 #2 创建未编目的连接
未编目的连接使您能够动态连接到 数据库。
<?php
$database = 'SAMPLE';
$user = 'db2inst1';
$password = 'ibmdb2';
$hostname = 'localhost';
$port = 50000;
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" .
"HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$password;";
$conn = db2_connect($conn_string, '', '');
if ($conn) {
echo "Connection succeeded.";
db2_close($conn);
}
else {
echo "Connection failed.";
}
?>
以上示例会输出:
Connection succeeded.
示例 #3 默认关闭自动提交创建连接
将选项数组传递给 db2_connect() 可以启用 修改连接句柄的默认行为。
<?php
$database = 'SAMPLE';
$user = 'db2inst1';
$password = 'ibmdb2';
$options = array('autocommit' => DB2_AUTOCOMMIT_OFF);
$conn = db2_connect($database, $user, $password, $options);
if ($conn) {
echo "Connection succeeded.\n";
if (db2_autocommit($conn)) {
echo "Autocommit is on.\n";
}
else {
echo "Autocommit is off.\n";
}
db2_close($conn);
}
else {
echo "Connection failed.";
}
?>
以上示例会输出:
Connection succeeded. Autocommit is off.
示例 #4 i5/OS 最佳性能
为您的 i5/OS ibm_db2 1.5.1 PHP 应用程序实现最佳性能 使用 db2_connect() 的默认主机、用户 ID 和密码。
<?php
$library = "ADC";
$i5 = db2_connect("", "", "", array("i5_lib"=>"qsys2"));
$result = db2_exec($i5,
"select * from systables where table_schema = '$library'");
while ($row = db2_fetch_both($result)) {
echo $row['TABLE_NAME']."</br>";
}
db2_close($i5);
?>
以上示例会输出:
ANIMALS NAMES PICTURES
示例 #5 使用可信上下文
以下示例演示如何启用受信任的上下文、开关 users,并获取当前用户 ID。
<?php
$database = "SAMPLE";
$hostname = "localhost";
$port = 50000;
$authID = "db2inst1";
$auth_pass = "ibmdb2";
$tc_user = "tcuser";
$tc_pass = "tcpassword";
$dsn = "DATABASE=$database;HOSTNAME=$hostname;PORT=$port;
PROTOCOL=TCPIP;UID=$authID;PWD=$auth_pass;";
$options = array ("trustedcontext" => DB2_TRUSTED_CONTEXT_ENABLE);
$tc_conn = db2_connect($dsn, "", "", $options);
if($tc_conn) {
echo "Explicit trusted connection succeeded.\n";
if(db2_get_option($tc_conn, "trustedcontext")) {
$userBefore = db2_get_option($tc_conn, "trusted_user");
//Do some work as user 1.
//Switching to trusted user.
$parameters = array("trusted_user" => $tc_user,
"trusted_password" => $tcuser_pass);
$res = db2_set_option ($tc_conn, $parameters, 1);
$userAfter = db2_get_option($tc_conn, "trusted_user");
//Do more work as trusted user.
if($userBefore != $userAfter) {
echo "User has been switched." . "\n";
}
}
db2_close($tc_conn);
}
else {
echo "Explicit trusted connection failed.\n";
}
?>
以上示例会输出:
Explicit trusted connection succeeded. User has been switched.
参见
- db2_close() - 关闭数据库连接
- db2_pconnect() - 返回与数据库的持久连接
更多建议: