В материале мы рассмотрим возможность взаимодействия языка программирования PHP версии 5.4.39 с СУБД PostgreSQL 9.1.13, мы научимся связывать PHP и PostgreSQL, узнаем, какие есть функции PHP для работы с PostgreSQL, а также разберем несколько примеров использования этих функций.
Для тех, кто увлекается web-программированием и в частности программированием на PHP не секрет что самой распространенной связкой языка и СУБД является связка PHP и MySQL, но иногда возникает необходимость взаимодействовать и с другими базами, например с PostgreSQL. Кстати, PHP поддерживает работу не только с MySQL и PostgreSQL, но еще и со многими другими СУБД, об этом мы говорили в материале PHP и базы данных. А сегодня мы подробней остановимся именно на работе с PostgreSQL, и начнем мы, конечно же, с вопроса как настроить взаимодействие PHP и PostgreSQL.
Примечание! В качестве операционной системы у нас будет выступать Windows 7, в качестве web-сервера Apache 2.2.2, версия PHP 5.4.39, версия PostgreSQL 9.1.13.
Настройка подключения PHP и PostgreSQL
Первое что нужно сделать, это убедиться, что в каталоге с PHP присутствует библиотека libpq.dll. Затем в файле php.ini найди строку, отвечающую за подключение модуля PostgreSQL и раскомментировать ее, а именно
Не подключено
;extension=php_pgsql.dll
Подключено
extension=php_pgsql.dll
Перезапускаем Apache и запускаем phpinfo(), и если Вы найдете блок pgsql, то все, библиотеку PostgreSQL Вы подключили.
Если у Вас нет данного раздела, то попробуйте скопировать libpq.dll из каталога PostgreSQL (по умолчанию C:\Program Files\PostgreSQL и так далее) в каталог с PHP с заменой старого, и перезапустите Apache еще раз.
Основные функции PHP для работы с PostgreSQL
pg_connect – открывает соединение с базой данных, возвращает указатель соединения.
pg_query – выполняет запрос к базе данных, возвращает результат запроса.
pg_fetch_assoc – преобразовывает результат запроса в ассоциативный массив.
pg_close – закрывает соединение с базой данных.
Пример работы перечисленных функций
<?php $connect_string = "host=localhost port=5432 dbname=testbase user=admin password=12345"; $dbconnect = pg_connect($connect_string); $query = "select 'Привет!' as field_1, 123 as field_2"; $result = pg_query($dbconnect, $query); $result = pg_fetch_assoc($result); echo $result['field_1'] . '</br>' . $result['field_2']; pg_close($dbconnect); ?>
Результат
В данном случае мы подключаемся к серверу, который расположен локально, по порту 5432, к базе testbase под пользователем admin с паролем 12345 и выполняем запрос (просто статические данные) к базе данных, затем мы преобразовываем результат в ассоциативный массив, выводим на экран и закрываем соединение.
pg_num_rows – возвращает количество строк в наборе данных, который вернул нам запрос.
pg_num_fields — возвращает количество полей в наборе данных, который вернул нам запрос.
pg_fetch_result – возвращает одно значение из результата запроса.
pg_fetch_row — преобразовывает результат запроса в массив.
Пример
<?php $connect_string = "host=localhost port=5432 dbname=testbase user=admin password=12345"; $dbconnect = pg_connect($connect_string); $query = "select 'Привет!' as field_1, 123 as field_2"; $result = pg_query($dbconnect, $query); $NumRows = pg_num_rows($result); $NumFields = pg_num_fields($result); $field_1 = pg_fetch_result($result, 0, 0); $result_array = pg_fetch_row($result); echo 'Количество строк - ' . $NumRows . '</br>'; echo 'Количество полей - ' . $NumFields . '</br>'; echo 'Значение первого поля первой строки - ' .$field_1 . '</br>'; echo 'Данные массива - ' . $result_array[0] . '-' . $result_array[1]; pg_close($dbconnect); ?>
Результат
pg_fetch_object – преобразовывает результат запроса в объект.
pg_field_name – возвращает название поля по его номеру.
pg_field_num – возвращает номер поля по его названию.
pg_version – возвращает сведения о протоколе взаимодействия, версии клиента и версии сервера в виде массива.
pg_escape_string – экранирует спецсимволы в строке.
pg_dbname – возвращает название базы данных.
pg_affected_rows – возвращает количество затронутых строк при update, insert и delete.
Пример
<?php $connect_string = "host=localhost port=5432 dbname=testbase user=admin password=12345"; $dbconnect = pg_connect($connect_string); $query = "select 'Привет!' as field_1, 123 as field_2"; $result = pg_query($dbconnect, $query); $result_object = pg_fetch_object($result); echo 'Значение свойства - ' . $result_object->field_1. '</br>'; echo 'Название первого поля - ' . pg_field_name($result, 0). '</br>'; echo 'Номер поля field_1 - ' . pg_field_num($result, 'field_1'). '</br>'; echo 'Версия PostgreSQL - ' . pg_version($dbconnect)['server'] . '</br>'; pg_close($dbconnect); ?>
Результат
На этом я предлагаю заканчивать, так как для основ этого достаточно, описание всех функций Вы можете найти на сайте PHP вот здесь, ну все, пока!
не подключается пхп к постгре, при том при выделении всех остальных субд все работает, но постгре так и не высвечивается( с заменой тоже все перепробовал
Установи linux CentOS ине будет проблем брооооооооооооо оо
У кого не подключает! (нет блока pgsql при выполнении phpinfo()) делаем так:
1.) В PATH добавьте директорию php где лежит libpq.dll (пример: С:\php)
2.) Тоже проделать с с директорией PostgreSQL где лежит libpq.dll (это папка bin, пример: С:\PostgreSQL\b in)
3.) Перезапустить Apache, а может и машину