PHPCon Poland 2024

Функции CUBRID (PDO_CUBRID)

Введение

PDO_CUBRID — драйвер, который реализует интерфейс PHP Data Objects (PDO) для доступа к базам данных CUBRID.

Замечание:

Текущая версия PDO_CUBRID не поддерживает постоянные соединения.

Установка

Для сборки модуля PDO_CUBRID, на том же хосте должен быть установлен СУБД CUBRID. PDO_CUBRID является модулем » PECL, так что для его установки следуйте инструкциям Установка модулей PECL. Для указания команде configure директории с установленной базой CUBRID, используйте следующий синтаксис:

   $ ./configure --with-pdo-cubrid=/path/to/CUBRID[,shared]
По умолчанию configure будет искать соответствующие библиотеки, руководствуясь значением переменной окружения CUBRID.

DLL для этого модуля PECL пока недоступна. Смотрите также раздел сборка на Windows. Для более подробной информации о ручной установке модуля под Linux и Windows, читайте build-guide.html, содержащийся в пакете PECL.

Функции PDO_CUBRID

Прокручиваемые курсоры

PDO_CUBRID поддерживает прокручиваемые курсоры. Тип курсора по умолчанию — "forward only" (только вперёд), и чтобы изменить тип курсора в методе PDO::prepare() указывают параметр driver_options.

Время ожидания

PDO_CUBRID поддерживает настройку времени ожидания выполнения SQL-запроса; Значение времени ожидания устанавливают методом PDO::setAttribute().

Режим автоподтверждения и транзакции

PDO_CUBRID поддерживает как режим автоподтверждения autocommit_mode, так и работу с транзакциями, а по умолчанию включён режим автоподтверждения. Состояние режима изменяют методом PDO::setAttribute().

Если для старта транзакции вызвали метод PDO::beginTransaction(), автоподтверждение будет автоматически запрещено и снова разрешено после вызова метода PDO::commit() или PDO::rollBack().

Замечание: Перед отключением автоподтверждения ожидающие запросы автоматически фиксируются.

Множественные SQL-запросы

PDO_CUBRID поддерживает множественные SQL-запросы. Множественные SQL-запросы разделяются точкой с запятой (;).

Информация о схеме

PDO_CUBRID реализует метод PDO::cubrid_schema(), чтобы получать информацию о схеме.

LOBs

PDO_CUBRID поддерживает типы данных BLOB и CLOB. LOB в PDO представлен как поток, поэтому можно вставлять LOB путём связывания с потоком и получать LOB путём чтения из потока, который возвращает CUBRID PDO. Например:

Пример #1 Вставка LOB в CUBRID PDO

<?php

$fp
= fopen('lob_test.png', 'rb');

$sql_stmt = "INSERT INTO lob_test(name, content) VALUES('lob_test.png', ?)";

$stmt = $dbh->prepare($sql_stmt);
$ret = $stmt->bindParam(1, $fp, PDO::PARAM_LOB);
$ret = $stmt->execute();

?>

Пример #2 Получение LOB в CUBRID PDO

<?php

$sql_stmt
= "SELECT content FROM lob_test WHERE name='lob_test.png'";

$stmt = $dbh->prepare($sql_stmt);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_NUM);

header("Content-Type: image/png");
fpassthru($result[0]);

?>

Метаинформация о столбцах

Метод PDOStatement::getColumnMeta() в CUBRID PDO вернёт ассоциативный массив, который содержит следующие значения:

  • type
  • name
  • table
  • def
  • precision
  • scale
  • not_null
  • auto_increment
  • unique_key
  • multiple_key
  • primary_key
  • foreign_key
  • reverse_index
  • reverse_unique

Тип данных Коллекция

PDO_CUBRID поддерживает типы данных SET, MULTISET и SEQUENCE. Если не указать тип данных, тип данных по умолчанию — char. Например:

Пример #3 Вставка коллекции в CUBRID PDO с типом данных по умолчанию.

<?php

$conn_str
="cubrid:dbname=demodb;host=localhost;port=33000";
$cubrid_pdo = new PDO($conn_str, 'dba', '');

$cubrid_pdo->exec("DROP TABLE if exists test_tbl");
$cubrid_pdo->exec("CREATE TABLE test_tbl (col_1 SET(VARCHAR))");

$sql_stmt_insert = "INSERT INTO test_tbl VALUES (?);";
$stmt = $cubrid_pdo->prepare($sql_stmt_insert);
$data = array("abc","def","ghi");
$ret = $stmt->bindParam(1, $data, PDO::PARAM_NULL);
$ret = $stmt->execute();
var_Dump($ret);

?>

Пример #4 Указание типа данных при вставке коллекции в CUBRID PDO

<?php

$conn_str
="cubrid:dbname=demodb;host=localhost;port=33000";
$cubrid_pdo = new PDO($conn_str, 'dba', '');

$cubrid_pdo->exec("DROP TABLE if exists test_tbl");
$cubrid_pdo->exec("CREATE TABLE test_tbl (col_1 SET(int))");

$sql_stmt_insert = "INSERT INTO test_tbl VALUES (?);";
$stmt = $cubrid_pdo->prepare($sql_stmt_insert);
$data = array(1,2,3,4);
$ret = $stmt->bindParam(1, $data, 0,0,"int");
$ret = $stmt->execute();
var_Dump($ret);

?>

CUBRID связывает типы данных для пятого параметра метода PDOStatement::bindParam():

  • CHAR
  • STRING
  • NCHAR
  • VARNCHAR
  • BIT
  • VARBIT
  • NUMERIC
  • NUMBER
  • INT
  • SHORT
  • BIGINT
  • MONETARY
  • FLOAT
  • DOUBLE
  • DATE
  • TIME
  • DATETIME
  • TIMESTAMP

Предопределённые константы

Драйвер определяет перечисленные ниже константы, которые доступны только тогда, когда PHP собрали с поддержкой этого модуля, или модуль динамически загрузили во время исполнения кода. Зависимые от драйвера константы разрешно использовать только совместно с этим драйвером. Атрибуты одного драйвера с другим драйвером ведут себя неожиданно. Для проверки названия драйвера, которое содержит атрибут PDO::ATTR_DRIVER_NAME, вызывают метод PDO::getAttribute(), если код запускается с несколькими драйверами.

Следующими константами устанавливают атрибуты базы данных. Эти константы передают в методы PDO::getAttribute() и PDO::setAttribute().

Флаги атрибутов драйвера PDO::CUBRID
Константы Описание
PDO::CUBRID_ATTR_ISOLATION_LEVEL Уровень изоляции для соединения.
PDO::CUBRID_ATTR_LOCK_TIMEOUT Время ожидания транзакции в секундах.
PDO::CUBRID_ATTR_MAX_STRING_LENGTH Только для чтения. Максимальная длина строки для типов данных bit, varbit, char, varchar, nchar, nchar при работе с API драйвера CUBRID модуля PDO.

Следующие константы устанавливают уровень изоляции транзакции. Эти константы передают в методы PDO::getAttribute() и PDO::setAttribute().

Флаги уровней изоляции драйвера PDO::CUBRID
Константы Описание
PDO::TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE Самый низкий уровень изоляции (1). Для кортежа может произойти грязное, неповторяемое или фантомное считывание, а также для таблицы может произойти неповторяемое считывание.
PDO::TRAN_COMMIT_CLASS_COMMIT_INSTANCE Относительно низкий уровень изоляции (2). Грязного чтения не будет, но неповторяющееся или фантомное возможно.
PDO::TRAN_REP_CLASS_UNCOMMIT_INSTANCE Уровень изоляции драйвера CUBRID по умолчанию (3). Для кортежа может произойти «грязное», неповторяемое или фантомное чтение, но для таблицы гарантировано повторяющееся чтение.
PDO::TRAN_REP_CLASS_COMMIT_INSTANCE Относительно низкий уровень изоляции (4). Грязного чтения не будет, но неповторяющееся или фантомное возможно.
PDO::TRAN_REP_CLASS_REP_INSTANCE Относительно высокий уровень изоляции (5). Грязного и неповторяющегося чтения не будет, но фантомное может возникнуть.
PDO::TRAN_SERIALIZABLE Самый высокий уровень изоляции (6). Грязное, неповторяющееся и фантомное чтение невозможны.

Следующие константы передают, когда получают информацию о схеме. Эти константы передают в метод PDO::cubrid_schema().

Флаги схемы драйвера PDO::CUBRID
Константы Описание
PDO::CUBRID_SCH_TABLE Получить имя и тип таблицы CUBRID.
PDO::CUBRID_SCH_VIEW Получить имя и тип представления в CUBRID.
PDO::CUBRID_SCH_QUERY_SPEC Получить определение запроса представления.
PDO::CUBRID_SCH_ATTRIBUTE Получить атрибуты столбца таблицы.
PDO::CUBRID_SCH_TABLE_ATTRIBUTE Получить атрибуты таблицы.
PDO::CUBRID_SCH_METHOD Получить метод экземпляра. Метод экземпляра — метод, который вызвал экземпляр класса. Методом экземпляра пользуются чаще, чем методом класса, поскольку большинство операций выполняют в экземпляре.
PDO::CUBRID_SCH_TABLE_METHOD Получить метод класса. Метод класса — метод, который вызвал объект класса. Методом класса обычно создают новый экземпляр класса или инициализируют его. Метод также вызывают, чтобы получить доступ или обновить атрибуты класса.
PDO::CUBRID_SCH_METHOD_FILE Получить информацию о файле, в котором определили метод таблицы.
PDO::CUBRID_SCH_SUPER_TABLE Получить имя и тип таблицы, из которой таблица наследует атрибуты.
PDO::CUBRID_SCH_SUB_TABLE Получить имя и тип таблицы, которая наследует атрибуты из этой таблицы.
PDO::CUBRID_SCH_CONSTRAINT Получить ограничения таблицы.
PDO::CUBRID_SCH_TRIGGER Получить триггеры таблицы.
PDO::CUBRID_SCH_TABLE_PRIVILEGE Получить информацию о правах на таблицу.
PDO::CUBRID_SCH_COL_PRIVILEGE Получить информацию о правах на столбец.
PDO::CUBRID_SCH_DIRECT_SUPER_TABLE Получить прямую супертаблицу для заданной таблицы.
PDO::CUBRID_SCH_PRIMARY_KEY Получить первичный ключ таблицы.
PDO::CUBRID_SCH_IMPORTED_KEYS Получить импортированные ключи таблицы.
PDO::CUBRID_SCH_EXPORTED_KEYS Получить экспортированные ключи таблицы.
PDO::CUBRID_SCH_CROSS_REFERENCE Получить связи двух таблиц.

Содержание

  • PDO_CUBRID DSN — Соединение с базой данных CUBRID
  • PDO::cubrid_schema — Получить запрошенную информацию о схеме
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top