Как стать автором
Обновить
0

Подключаемся к СУБД CUBRID через PHP

Время на прочтение 8 мин
Количество просмотров 1.6K
Итак Вы, я уверен, уже знаете, как в PHP подключаться и работать с определенными реляционными системами баз данных. В этом блоге я расскажу, как начать работу в PHP с СУБД CUBRID, в чем ее отличие от других систем, а также приведу примеры для быстрого начала. Хорошая новость заключается в том, что последняя версия CUBRID 8.4.0 на 90% совместима с MySQL и с точки зрения SQL синтаксиса, и с точки зрения функций PHP.

Сразу оговорюсь, что речь будет идти о PHP версии 5.2 и выше, ибо это минимальное требование для работы с СУБД CUBRID в PHP.

Установка


Установка PHP драйвера для CUBRID типична. В ОС Windows Вы можете использовать автоматический исталлятор, либо можете вручную прописать все необходимое в конфигурационном файле php.ini. В ОС Linux инструкции почти такие же: можно использовать инсталлятор PECL, либо самому изменить php.ini.

Установка PHP Драйвера с помощью Установщика Windows

1. Скачайте последнюю версию CUBRID PHP API Installer с оффициального сайта (< 870КБ). В этом установшике есть все версии PHP драйвера на всевозможные комбинации PHP и CUBRID.
2. Убедитесь, что сам движок PHP и СУБД CUBRID установлены.
3. Запустите установшик.
4. Все как в типичном Windows исталляторе:
  • укажите путь для установки;
  • подтвердите имя папки для главного меню Старт;
  • нажмите на "Установить".

Готово! Не забудьте перезапустить свой Веб сервер. В результате этой установки, инсталлятор автоматически определит версию Вашего PHP движка, версию СУБД CUBRID, а также папку, в котором по-умолчанию PHP хранит свои драйвера (обычно это C:\Program Files\PHP\ext). Исходя из этого, установщик скопирует необходимый php_cubrid.dll в эту папку со всеми остальными драйверами. Затем он добавит следующие две строчки в конфигурационный файл php.ini.

[PHP_CUBRID]
extension=php_cubrid.dll

Все стандартно, но все происходит автоматически без Вашего участия. Этот же способ, но уже на английском и со скриншотами можете посмотреть здесь.

Ручная конфигурация php.ini в ОС Windows

То же самое, что делает CUBRID PHP API Installer, Вы можете сделать сами.
  1. Скачайте необходимый для Вас драйвер с оффициального сайта (< 40КБ). Доступны как и thread-safe, так и non-thread-safe версии для Apache и IIS.
  2. Распакуйте архив.
  3. Скопируйте php_cubrid.dll в папку, где лежат Ваши остальные PHP драйвера.
  4. Откройте конфигурационный файл php.ini и вставьте в конце файла вышеуказанные две строчки.
  5. Сохраните измененния и перезапустите свой Веб сервер.

Все готово!

Установка PHP Драйвера в ОС Linux с помощью Исталлятора PECL

Здесь мы покажем как установить CUBRID PHP драйвер в ОС Linux, основанных на DEBIAN. Для RPM основанных Linux смотрите инструкцию ниже.
  1. Устанавливаем phpize
    sudo apt-get install php5-dev
  2. Устанавливаем пакет PEAR, который предоставляет команды PECL
    sudo apt-get install php-pear
  3. Теперь устанавливаем сам CUBRID PHP драйвер с помощью команды PECL.
    sudo pecl install cubrid
    Это установит последнюю версию драйвера cubrid.so. Если Вам нужен один из предыдущих версий, то укажите версию при установке так:
    sudo pecl install cubrid-8.3.0.0005
    Если в этот момент отобразится запрос "CUBRID base install dir [autodetect] :", введите полный путь директории, в который установлен CUBRID. Например, если CUBRID установлен в /home/cubridtest/CUBRID, введите /home/cubridtest/CUBRID.
  4. В конце Вам необходимо изменить конфигурационный файл php.ini, добавив следующие две строчки в конце файла.
    [CUBRID]
    extension=cubrid.so


Установка CUBRID PHP драйвера в ОС Linux, основанных на RPM.
  1. Устанавливаем phpize
    yum install php-devel
  2. Скачиваем пакет PEAR
    wget pear.php.net/go-pear.phar
  3. Запускаем пакет PEAR в PHP
    php go-pear.phar
  4. Теперь устанавливаем сам CUBRID PHP драйвер с помощью команды PECL.
    pecl install cubrid
    Это установит последнюю версию драйвера cubrid.so. Если Вам нужен один из предыдущих версий, то укажите версию при установке так:
    pecl install cubrid-8.3.0.0005
    Если в этот момент отобразится запрос "CUBRID base install dir [autodetect] :", введите полный путь директории, в который установлен CUBRID. Например, если CUBRID установлен в /home/cubridtest/CUBRID, введите /home/cubridtest/CUBRID.
  5. В конце Вам необходимо изменить конфигурационный файл php.ini, добавив следующие две строчки в конце файла.
    [CUBRID]
    extension=cubrid.so


Готово! Не забудьте перезапустить Веб сервер.

Ручная конфигурация php.ini в ОС Linux

Установить CUBRID PHP драйвер можно и без phpize и PEAR — вручную. Смотрим инструкции ниже.

  1. Скачайте необходимый для Вас драйвер с оффициального сайта (< 80КБ). Доступны версии как и для x64, так и для x86.
  2. Распакуйте архив.
  3. Скопируйте cubrid.so в директорию, где лежат Ваши остальные PHP драйвера (обычно это /usr/lib/php5/20090626 для PHP 5.3.3, где 20090626 название директории, которая может изменяться в зависимости от версии PHP).
  4. Откройте конфигурационный файл php.ini (обычно находится в /etc/php5/apache2/php.ini) и вставьте в конце файла следующие две строчки.
    [CUBRID]
    extension=cubrid.so

  5. Сохраните измененния и перезапустите свой Веб сервер.

Готово! Если возникнут проблемы при установки драйвера, напишите в комментариях.

Работа с драйвером CUBRID PHP


Как Вы, должно быть, знаете, подключение и работа с базами Oracle и PostgreSQL похожи в каком-то роде. Работая с ними, Вы напрямую подключаетесь к определенной базе, нежели к хосту или серверу в целом, как Вы обычно делаете в MySQL и MSSQL. В случае MySQL и MSSQL вы создаете соединение с хостом, затем второй шаг — выбираете базу, к которой Вам необходимо подсоединиться.

Работа с СУБД CUBRID в этом смысле похожа на Oracle и PostgreSQL. Вы напрямую подключаетесь к базе данных, с которым Вы хотите работать. Поэтому в CUBRID PHP, как и в Oracle и PostgreSQL, нет функций, которые позволяют создавать, удалять или выбирать базы данных, за исключением тех функций, которые выдают информацию о рабочей базе. Вот в этом они отличаются от библиотек MySQL и MSSQL.

Синтаксис

resource cubrid_connect(string $host, int $port, string $dbname [, string $userid [, string $passwd ]] )

Пример

$host_ip = "localhost";
$host_port = 33000;
$db_name = "demodb";

$conn = cubrid_connect($host_ip, $host_port, $db_name)
or die("Could not connect: " . cubrid_error());

print ("Connected successfully");

cubrid_close($conn);


По-умолчанию параметр auto_commit при подключении отключен, т.е. во всех следующих транзакциях Вы должны сами подтверждать транзакцию. Например:

cubrid_commit($conn);

Такая реализация очень удобна, если Вы хотите программно контролировать дальнейшие действия при ошибках в транзакциях (т.е. выдавать какие-то определенные сообщения и т.п.). Если предпочтете фиксировать все транзакции, можете включить auto_commit либо сразу при подключении, либо уже во время работы. В первом случае подсоединяйтесь через cubrid_connect_with_url.

$conn_url = "cci:CUBRID:127.0.0.1:33088:demodb:dba:123456:?autocommit=off"
$conn = cubrid_connect_with_url($conn_url);

Таким образом, все запросы будут фиксироваться автоматически. Во втором случае вызывайте функцию cubrid_set_autocommit в необходимый момент, например:

if (cubrid_set_autocommit($conn, true)){
echo "Теперь все автоматом коммитится";
}

Точно также можно отключить auto_commit. Чтобы узнать статус auto_commit во время работы, Вы можете вызвать cubrid_get_autocommit.

Все остальные запросы в CUBRID очень похожи на синтаксис MySQL.

// Синтаксис запросов одинаков
$sql = "select sports, count(players) as players from event group by sports";
// Замените просто на просто приставку "mysql_" на "cubrid_"
$result = cubrid_query($conn, $sql);

if ($result){
	// количество столбцов в запросе
	$num_fields = cubrid_num_fields($result);
	
	echo("<tr>");

	// имена столбцов в запросе по синтаксису MySQL
	for ($i = 0; $i < $num_fields; ++$i){
		echo("<td align=center>");
		echo(cubrid_field_name($result, $i));
		echo("</td>");
	}

	echo("</tr>");

	// то же самое можно сделать в стиле CUBRID, но только одним запросов
	$columns = cubrid_column_names($result);
	echo("<tr>");

	while (list($key, $colname) = each($columns)){
		echo("<td align=center>$colname</td>");
	}

	echo("</tr>");

	// Получаем численный и ассоциативный массив
	while ($row = cubrid_fetch_array($result)){
		// также можно использовать cubrid_fetch_assoc, cubrid_fetch_field,
		// cubrid_fetch_lengths, cubrid_fetch_row и cubrid_fetch_object
		// Все как в MySQL
		echo("<tr>");

		for ($i = 0; $i < $num_fields; ++$i){
			echo("<td align=center>");
			echo($row[$i]);
			echo("</td>");
		}

		echo("</tr>");
	}
}

cubrid_close($conn);

Для ввода нового или обновления старого значения, можно использовать те же функции, что и в MySQL, но уже с приставкой «cubrid_».

$sql = "insert into olympic (host_year,host_nation,host_city,"
		. "opening_date,closing_date) values (2008, 'China', 'Beijing',"
		. "to_date('08-08-2008','mm-dd-yyyy'),to_date('08-24-2008','mm-dd-yyyy')) ;"

$result = cubrid_query($cubrid_con, $sql);

if ($result){
	// Если auto_commit не включен по-умолчанию, то подтвердаем транзакцию
	if (!cubrid_get_autocommit($cubrid_con)){
		cubrid_commit($cubrid_con);
	}

	echo("Inserted successfully ");
}
else{
	echo(cubrid_error());
	cubrid_rollback($cubrid_con);
}

cubrid_disconnect($cubrid_con);

Чтобы получить ID, сгенерированного при последнем INSERT-запросе, учитывая, что в таблице есть столбец с AUTO_INCREMENT ограничением, можно вызвать функцию cubrid_insert_id. Отличается эта функция от mysql_insert_id лишь тем, что в CUBRID функция возвращает строку, в то время как MySQL — число int. Удобство строки заключается в том, что эта функция может возвращать ID типа BIGINT, в то время как функцию MySQL нельзя использовать для больших чисел. Если в таблице нет AUTO_INCREMENT столбцов, cubrid_insert_id возвратит 0.

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

$affected_num = cubrid_affected_rows();
echo "Всего изменений: " . $affected_num;

Полный список всех CUBRID PHP функций, сопоставленных с соответствующими функциями MySQL PHP, Вы можете посмотреть здесь, где Вы заметите, что почти все функции идентичны с учетом замены префикса mysql_ на cubrid_.

Постоянные соединения

В библиотеке CUBRID PHP постоянные соединения не реализованы по единственной причине того, что CUBRID сам поддерживает постоянные соединения. Т.е. Вы может задать в конфигурациях CUBRID Broker значение параметра CCI_PCONNECT [ссылка в мануал] как ON и перезапустить брокер, после чего все соединения между клиентским приложением и базой CUBRID буду постоянными, даже если Вы закроете их с помощью cubrid_close.

Пул постоянных соединений может содержать максимум 256 соединений. Все остальные соединения будут открываться, как обычные, пока какой-либо из постоянных соединений не освободится. Также можно задать KEEP_CONNECTION.

[%BROKER1]
SERVICE = ON
BROKER_PORT = 33000
...
KEEP_CONNECTION = ON
CCI_PCONNECT = ON
STATEMENT_POOLING = ON

Подготовленные запросы

В библиотеке CUBRID PHP также можно задавать подготовленные запросы (prepared statements). Они могут включать как и "?", так и именные заполнители. Например:

Применение ? в качестве заполнителя
// ? в качестве заполнителя
$sql = "SELECT * FROM game WHERE host_year = ?;

$req = cubrid_prepare($conn, $sql);

// порядковое связывание значений, начиная с 1
cubrid_bind($req, 1, 2004);

cubrid_execute($req);


Применение именного заполнителя
// именной заполнитель
$sql2 = "SELECT * FROM game WHERE host_year = :host_year";

$req = cubrid_prepare($conn, $sql);

// также именное присвоение
cubrid_bind($req, ':host_year', 2004);

cubrid_execute($req);

Все довольно просто. В конфигурациях CUBRID Broker есть еще один параметр STATEMENT_POOLING, который отвечает за пулинг подготовленных запросов. Если включить этот параметр (ON, OFF, по-умолчанию ON), то все подготовленные запросы будут сохранятся в специальном пуле, что позволяет их переиспользовать. Если отключить, то подготовленные запросы будут закрываться сразу после завершения транзакций.

Итак, как Вы заметили, практически все, что работает с MySQL, будет работать и с CUBRID. А если у Вас что-то не сработает «из под коробки», пишите в комментариях. Разберемся. А может даже, благодаря Вам, в CUBRID PHP API будет что-то еще новенькое.
Теги:
Хабы:
+4
Комментарии 12
Комментарии Комментарии 12

Публикации

Информация

Сайт
www.cubrid.org
Дата регистрации
Дата основания
2006
Численность
1 001–5 000 человек
Местоположение
Южная Корея

Истории