PDO_CUBRID — драйвер, через который PHP получает доступ к базам данных CUBRID. Для этого драйвер реализует интерфейс модуля PDO.
Замечание:
Текущая версия драйвера PDO_CUBRID не поддерживает постоянные соединения.
Для сборки модуля PDO_CUBRID потребуется установить СУБД CUBRID на том же хосте, на котором установили PHP. PDO_CUBRID — модуль » PECL, поэтому для его установки следуйте инструкциям Установка модулей PECL. Для указания команде configure директории с установленной базой CUBRID, используйте следующий синтаксис:
$ ./configure --with-pdo-cubrid=/path/to/CUBRID[,shared]
DLL для этого модуля PECL пока недоступна. Смотрите также раздел сборка на Windows. Для более подробной информации о ручной установке модуля под Linux и Windows, читайте build-guide.html, содержащийся в пакете PECL.
Драйвер PDO_CUBRID поддерживает прокручиваемые курсоры. Тип курсора по умолчанию — "forward only" (только вперёд), и чтобы изменить тип курсора в методе PDO::prepare() указывают параметр driver_options.
Драйвер PDO_CUBRID поддерживает настройку времени ожидания выполнения SQL-запроса; значение времени ожидания устанавливают методом PDO::setAttribute().
Драйвер PDO_CUBRID поддерживает как режим автоподтверждения autocommit_mode, так и работу с транзакциями, а по умолчанию включён режим автоподтверждения. Состояние режима изменяют методом PDO::setAttribute().
Автоподтверждение будет автоматически запрещено и снова разрешено после вызова метода PDO::commit() или PDO::rollBack(), если для старта транзакции вызвали метод PDO::beginTransaction().
Замечание: Перед отключением автоподтверждения ожидающие запросы автоматически фиксируются.
Драйвер PDO_CUBRID поддерживает множественные SQL-запросы. Множественные
SQL-запросы разделяются точкой с запятой (;
).
Драйвер PDO_CUBRID реализует метод PDO::cubrid_schema(), чтобы получать информацию о схеме.
Драйвер PDO_CUBRID поддерживает типы данных BLOB и CLOB. Тип данных LOB (англ. сокр.: Large Objects) в модуле PDO представили как поток. Поэтому разрешается вставлять LOB-объект в базу данных путём связывания подготовленного запроса с потоком и получения LOB-объекта считыванием из потока, который возвращает PDO-объект, который настроили на работу с драйвером БД CUBRID. Например:
Пример #1 Пример вставки LOB-объекта в БД CUBRID
<?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
<?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() в PDO-объекте, который настроили на работу с БД CUBRID, вернёт ассоциативный массив, который содержит следующие значения:
Драйвер PDO_CUBRID поддерживает типы данных SET, MULTISET и SEQUENCE. Тип данных по умолчанию — char, если тип данных не указали вручную. Например:
Пример #3 Пример вставки коллекции в БД CUBRID с типом данных по умолчанию
<?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
<?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():
Драйвер
определяет следующие константы и открывает доступ к ним только тогда, когда PHP собрали
с поддержкой этого модуля, или модуль динамически загрузили при выполнении кода.
Константы, которые зависят от драйвера, разрешается использовать только совместно с драйвером.
Атрибуты одного драйвера с другим драйвером ведут себя неожиданно. Чтобы проверить название
драйвера, которое содержит атрибут PDO::ATTR_DRIVER_NAME
, вызывают
метод PDO::getAttribute(), если код запускается с несколькими драйверами.
Следующими константами устанавливают атрибуты базы данных. Эти константы передают в методы PDO::getAttribute() и PDO::setAttribute().
Константы | Описание |
---|---|
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::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_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 |
Получить связи двух таблиц. |