PHP8 db2_connect

2024-04-06 18:04 更新

(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_ONvalue 打开 DB2 UDB CLI iSeries 系统命名模式。使用斜杠 (/) 分隔符限定文件。 使用作业的库列表解析不合格的文件。

DB2_I5_NAMING_OFFvalue 关闭 DB2 UDB CLI 缺省值 命名模式,即 SQL 命名。使用句点 (.) 限定文件 定界符。使用默认库解析不合格的文件 或当前用户 ID。

i5_commit

该属性应设置在 db2_connect() 之前。如果在 连接已建立,并且连接是远程数据 source,则更改在连接句柄的下一个成功 db2_connect() 之前不会生效。i5_commit

注意

php.ini设置 ==0 或者是默认值,但可能是 被选项覆盖。ibm_db2.i5_allow_commitDB2_I5_TXN_NO_COMMITi5_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_ONvalue 打开 DB2 6X 分配方案 用于 DBCS 转换列大小的增长。

DB2_I5_DBCS_ALLOC_OFFvalue 关闭 DB2 6X 分配方案 用于 DBCS 转换列大小的增长。

注意:php.ini设置 ==0 或为默认值,但可能会被覆盖 替换为选项。ibm_db2.i5_dbcs_allocDB2_I5_DBCS_ALLOC_OFFi5_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() - 返回与数据库的持久连接


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

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号