CakeFest 2024: The Official CakePHP Conference

db2_connect

(PECL ibm_db2 >= 1.0.0)

db2_connect Возвращает соединение с базой данных

Описание

db2_connect(
    string $database,
    ?string $username,
    ?string $password,
    array $options = []
): resource|false

Создаёт новое соединение с базой данных IBM DB2 Universal Database, IBM Cloudscape или Apache Derby database.

Список параметров

database

Для каталогизированного соединения с базой данных database представляет собой псевдоним базы данных в клиентском каталоге DB2.

Для некаталогизированного подключения к базе данных 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 включает автоматическую фиксацию (autocommit) для этого дескриптора соединения.

Передача значения DB2_AUTOCOMMIT_OFF выключает автоматическую фиксацию (autocommit) для этого дескриптора соединения.

DB2_ATTR_CASE

Передача значения DB2_CASE_NATURAL указывает, что имена столбцов возвращаются в естественном регистре.

Передача значения DB2_CASE_LOWER указывает, что имена столбцов возвращаются в нижнем регистре.

Передача значения DB2_CASE_UPPER указывает, что имена столбцов возвращаются в верхнем регистре.

CURSOR

Передача значения DB2_FORWARD_ONLY задаёт курсор, который двигается только вперёд, для ресурса оператора. Данный тип курсора используется по умолчанию, он поддерживается всеми серверами баз данных.

Передача значения DB2_SCROLLABLE задаёт прокручиваемый курсор для ресурса оператора. Этот режим включает произвольный доступ к строкам в наборе результатов, но в настоящее время поддерживается только IBM DB2 Universal Database.

Данная новая опция доступна в ibm_db2 версии 1.7.0 и новее.

trustedcontext

Передача значения DB2_TRUSTED_CONTEXT_ENABLE включает доверенный контекст для этого дескриптора соединения. Этот параметр нельзя установить с помощью db2_set_option().

Этот ключ работает только в том случае, если база данных каталогизирована (даже если база данных является локальной) или если будет указан полный 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

Данные новые опции i5/OS доступны в ibm_db2 версии 1.5.1 и новее.

i5_lib

Символьное значение, указывающее библиотеку по умолчанию, которая будет использоваться для разрешения неквалифицированных ссылок на файлы. Это недопустимо, если соединение использует режим именования системы.

i5_naming

Значение DB2_I5_NAMING_ON включает режим именования системы DB2 UDB CLI iSeries. Файлы квалифицируются с помощью косой черты (/) в качестве разделителя. Неквалифицированные файлы разрешаются с использованием списка библиотек для работы.

Значение DB2_I5_NAMING_OFF выключает режим именования по умолчанию DB2 UDB CLI, который является именованием SQL. Файлы квалифицируются с использованием точки (.) в качестве разделителя. Неквалифицированные файлы разрешаются с использованием либо библиотеки по умолчанию, либо текущего идентификатора пользователя.

i5_commit

Атрибут i5_commit должен быть установлен перед вызовом db2_connect(). Если значение изменяется после того, как соединение было установлено, и соединение установлено с удалённым источником данных, изменение не вступит в силу до следующего успешного вызова db2_connect() для дескриптора соединения.

Замечание:

Параметр php.ini ibm_db2.i5_allow_commit==0 или 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 включает схему распределения DB2 6X для увеличения размера столбца преобразования DBCS.

Значение DB2_I5_DBCS_ALLOC_OFF отключает схему распределения DB2 6X для увеличения размера столбца преобразования DBCS.

Замечание: параметр php.ini ibm_db2.i5_dbcs_alloc== 0 или 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 Command Line Processor (CLP) или DB2 Configuration Assistant.

<?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

Для достижения максимальной производительности вашего приложения PHP i5/OS ibm_db2 1.5.1 используйте хост по умолчанию, идентификатор пользователя и пароль для db2_connect().

<?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 Использование доверенного контекста

В данном примере показано, как включить доверенный контекст, переключить пользователей и получить текущий идентификатор пользователя.

<?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");

// Выполнение работы в качестве пользователя 1

// Переключение на доверенного пользователя
$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");
// Продолжение выполнения работы в качестве доверенного пользователя

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() - Возвращает постоянное соединение с базой данных

add a note

User Contributed Notes 1 note

up
2
d dot lanza38 at gmail dot com
8 years ago
As of 09/29/2015 when using the ibm_db2 driver and specifying an invalid library list with the 'i5_libl' option, the connection will be successfully created but with a default library list. What happens is the connection is made and THEN the library list is attempted to be changed. The connection will be a success but the library list change will fail without "db2_conn_error()" or "db2_conn_errormsg()" reporting anything and a default library list will be used. However, "db2_stmt_error()" and "db2_stmt_errormsg()" will register with a value. Also if error reporting is enable, the warning will be output to the screen. This is not a bug, rather intended behavior according to Zend (I opened a ticked) and depending on which library list is used/swapped could lead to major problems (development VS production). I stumbled upon this behavior when an anomaly (which I still can't explain) was imploding my library list with the character 'Z'. I realized I was in my development environment but accessing production data as a result. Going forward I will make sure to add this additional check for good measure.

See below to recreate behavior:

<?php
ini_set
("display_errors", 1);

$systemName = 'systemName';
$userID = 'userName';
$password = 'password';

$options['i5_libl'] = implode('Z', array(
'INVALID',
'LIB',
'LIST',
'IMPLODED',
'WITH',
'THE',
'LETTER',
'Z'
));

$options['i5_naming'] = DB2_I5_NAMING_ON;

$conn = db2_connect($systemName, $userID, $password, $options);
//This line causes "ini_set("display_errors", 1)" to dislay this warning on the screen:
//Warning: db2_connect(): Statement Execute Failed in /PATH/TO/FILE/test.php on line 58

if (db2_stmt_error()) { //Evaluates to true
echo "error ID: " . (db2_stmt_error()); //Displays error code: 38501
echo "<br>error message: " . (db2_stmt_errormsg()); //Displays: Trigger program or external routine detected an error. SQLCODE=-443
}

echo
"<br />|".db2_conn_error()." ||| ".db2_conn_errormsg()."|<br />"; //Only "| ||| |" is displayed
print_r($conn); //A resource ID is displayed
echo "<br />";

if(isset(
$conn) && $conn === true){
echo
"Boolean true<br />";
//never executes, but not expected since either false or a resource ID should be returned.
//Plus it is clear $conn contains a resource ID from above.
}
if(isset(
$conn) && $conn == true){
echo
"Non-Boolean true 2<br />";
//This always executes regardless of an accurate library list or not
//I suppose "if($conn)" would evaluate to non-boolean true so this makes sense.
}
if(isset(
$conn) && $conn == "true"){
echo
"String true";
//Never executes, but not expected.
}
if(isset(
$conn) && $conn === false){
echo
"Boolean false<br />";
//never executes because the connection itself was a success.
//If invalid credentials were provided this executes.
}
if(isset(
$conn) && $conn == false){
echo
"Non-Boolean false 2<br />";
//never executes because the connection itself was a success.
//Added this here because I was unsure if a boolean false would be returned or not.
//If invalid credentials were provided this executes as well.
}
if(isset(
$conn) && $conn == "false"){
echo
"String false";
//never executes because the connection itself was a success.
//Added this here because I was unsure if a String "false" would be returned
}
?>
To Top