И все-таки, почему PostgreSQL?
Как перестать беспокоиться и начать работать с PostgreSQL
Функции обслуживания СУБД PostgreSQL
16.3.1 . Настройка соединения и определение его параметров
16.3. 1.1. Закрытие соединения: pg_close
bool pg_close (int connection)
Функция предназначена для закрытия соединения с базой данных, указатель на
которую содержится в аргументе connection. Если этот аргумент не ассоциируется с активным соединением, функция возвращает false.
Необходимо иметь в виду, что pg_close() не закрывает постоянные соединения,
открытые с помощью pg_pconnect () (см. раздел 16.3.1.7).
16.3.1.2. Открытие соединения: pg_connect
int pg_connect (string host, string port, string dbname)
int pg_connect (string host, string port,
string options, string dbname)
int pg_connect (string host, string port,
string options, string tty, string dbname)
int pg_connect (string conn_string)
Функция предназначена для открытия соединения с сервером PostgreSQL. Возвращает указатель соединения в случае успешного завершения или false — при
возникновении ошибки. Все аргументы, которые перечислены ниже, должны представлять собой строковые значения.
host | Доменное имя машины, на которой запущен сервер PostgreSQL. Имейте в виду, что если это имя отлично от localhost, в конфигурации данного сервера должен быть разрешен доступ для подключения вашего WWW-сервера к СУБД по TCP/IP
| port | Номер порта TCP/IP, который используется сервером. По умолчанию это значение равно 5432, и об этом знают как РНР, так и сервер PostgreSQL. Чтобы проверить, какое значение порта используется в вашем случае, зайдите в каталог/tmp, где находится файл с именем = .s. PGSQL. 5432. Последние четыре символа в имени как раз и определяют номер порта
| tty | Ассоциируемый с соединением номер виртуального терминала, на который отправляются сообщения об ошибках и выполняется отладочная печать. Как правило, не используется
| options | Дополнительные параметры, передаваемые серверу при открытии соединения. Как правило, не используются
| dbname | Имя базы данных, с которой устанавливается соединение. Это обязательный параметр
| user | Имя пользователя, под которым открывается доступ к базе данных. Очевидно, что данному пользователю должны быть даны соответствующие привилегии. По умолчанию при подключении к PostgreSQL через Apache имя пользователя устанавливается равным nobody. Если же Apache аутентифицировал имя пользователя, то его имя будет автоматически передано в сервер
| password | Пароль, ассоциируемый с именем данного пользователя. Используется сервером PostgreSQL для проверки полномочий подключаемого пользователя
|
Следует отметить, что в настоящее время предпочтительным является последний
формат вызова функции, в котором все аргументы размещаются в одной строке,
однако вы можете воспользоваться любым из них, как показано ниже:
<?php
$dbconn = pg_Connect ("dbname=nntp");
//подключаемся к базе данных "nntp"
$dbconn2 = pg_Connect ("host=fakir.info.mil.ru port=5432 dbname=nntp");
//To же самое, но мы явно задаем номер порта и имя машины
$dbconn3 = pg_Connect ("dbname=nntp user=indigo password=bananan");
// Подключаемся с указанием имени пользователя и его пароля.
// Отсюда следует, что постронним глядеть на скрипты РНР
// не стоит!
?>
Допускается одновременное открытие нескольких соединений с различными базами данных в одной программе, а также одновременное подключение к одному серверу и базе данных различных программ.
16.3.1.3. Считывание имени базы данных: pg_dbname
string pg_dbname (int connection)
Возвращает имя базы данных, соединение с которой адресуется указателем
connection, или значение false, если аргумент функции не указывает на корректное соединение с базой данных.
16.3.1.4. Считывание сообщения об ошибке: pg_errormessage
string pg_errormessage (int connection)
Возвращает строку, в которой содержится текст последнего сообщения об ошибке,
сгенерированного в ходе работы с соединением connection. Если аргумент функции не указывает на активное соединение, функция возвращает false.
16.3.1.5. Считывание имени хоста: pg_host
string pg_host (int connection_id)
Функция pg_host() возвращает имя хоста, где установлен сервер базы данных,
с которым установлено соединение, обозначенное идентификатором аргумента
функции connectiod.
16.3.1.6. Считывание параметров соединения: pg_options
string pg_options (int connection_id)
Функция pg_options () возвращает строку, в которой содержатся параметры соединения connection_id, использовавшиеся при его открытии.
16.3.1.7. Открытие постоянного соединения: pg_pconnect
int pg_pconnect (string conn_string)
При успешном завершении эта функция, как и pg_connect () (см. раздел 16.3.1.2),
возвращает идентификатор соединения и false — в случае ошибки. Функция устанавливает соединение с базой данных; все аргументы, необходимые для этого, аналогичны аргументам функции pg_connect () и должны быть переданы внутри строки.
16.3.1.8. Считывание номера порта: pg_port
int pg_port (int connection_id)
Функция pg_port () возвращает номер порта, по которому осуществлено подключение данного соединения.
16.3.1.9. Настройка кодировки: pg_set_client_encoding
int pg_set_client_encoding ([int connection, string encoding])
Функция осуществляет установку кодировки клиентской части интерфейса с
PostgreSQL и возвращает 0 в случае успешного завершения или -1 — при ошибке.
Аргумент encoding может принимать одно из значений: SQL_ASCII, EUC_JP,
EUC_CN, EUC_KR, EUC_TW, UNICODE, MULE_INTERNAL,LATINX(X=1...9),
KOI8, WIN, ALT, SJIS, BIGS, WIN1250.
16.3.1.10. Считывание кодировки: pg_client_encoding
string pg_client_encoding ([int connection])
Функция возвращает текущее значение клиентской кодировки для заданного соединения. Результат принимает одно из значений: SQL_ASCII, EUC_JP, EUC_CN,
EUC_KR, EUC_TW, UNICODE, MULE_INTERNAL, LATINX (X=1...9), KOI8,
WIN, ALT, SJIS, BIG5, WIN1250.
16.3.1.11. Включение трассировки: pg_trace
bool pg_trace (string filename [, string mode [, int connection]])
Включает режим трассировки обмена между клиентской и серверной частями
PostgreSQL в отладочный файл. Чтобы полностью понять смысл получаемых результатов, вам необходимо иметь представление о коммуникационном протоколе
PostgreSQL.
Аргументы filename и mode те же, что и для функции fopen() (раздел 10.3.10),
аргумент connect! on указывает на соединение, подлежащее трассировке, причем
по умолчанию используется последнее открытое соединение.
Возвращает true, если в ходе вызова функции удалось открыть файл с заданным
именем, и false — в случае ошибки.
16.3.1.12. Имя терминала отладочной печати: pg_tty
string pg_tty (int connection_id)
Функция pg_tty() возвращает имя терминала, на который отправляются отладочные сообщения сервером PostgreSQL для заданного соединения.
16.3.1.13. Отключение режима трассировки: pg_untrace
bool pg_untrace (tint connection])
Прекращает трассировку, начатую с помощью функции pg_trace() (см. раздел
16.3.1.11). Аргумент connection указывает на трассируемое соединение. По умолчанию используется последнее открытое соединение. Функция всегда возвращает
true.
16.3.2. Работа с базами данных
16.3.2.1. Считывание количества вовлеченных в операцию записей: pg_cmdtuples
int pg_cmdtuples (int result_id)
Функция pg_cmdtuples () возвращает количество записей (или кортежей, с точки зрения традиционной терминологии реляционных баз данных), которые были
вовлечены в операцию с использованием запросов INSERT, UPDATE или DELETE. Если
в ходе выполнения запроса не было добавлено, изменено или удалено ни одной
записи, функция возвращает 0. Вот пример использования этой функции:
<?php
Sresult = pg_exec ($conn, "INSERT INTO publisher".
"VALUES ('Author')");
$cmdtuples = pg_cmdtuples ($result);
echo "Всего обработано строк:" . $cmdtuples ;
?>
При выполнении операции SELECT для получения количества извлеченных записей используется функция pg_numrows() (см. раздел 16.3.2.9), а для получения
количества полей в записи — функция pg_numfields() (см. раздел 16.3.3.7).
16.3.2.2. Синхронизация с сервером: pg_end_copy
bool pg_end_copy ([resource connection])
Функция pg_end_copy ( ) синхронизирует буферы баз данных PostgreSQL с сервером после выполнения операции копирования. Рекомендуется периодически
выполнять эту операцию во избежание рассогласования между локальным представлением о содержимом базы данных в PHP-программе и данными на сервере.
По большому счету, ничем не отличается от механизма поддержки транзакции.
Практическая необходимость возникает только в программах, выполняемых длительное время в условиях высокой нагрузки со стороны пользователей.
Функция возвращает true в случае успешного завершения и false —при обнаружении ошибки.
Пример ее использования вы найдете при обсуждении функции pg_put_line()
(раздел 16.3.2.10).
16.3.2.3. Выполнение запроса: рg_ехес
int pg_exec (int connection, string query)
Возвращает целочисленный указатель на структуру, содержащую результат выполнения SQL-запроса query применительно к соединению, идентифицируемому указателем handle.
Если указатель на соединение имеет недопустимое значение, функция возвращает
false. В случае возникновения ошибки при обработке запроса детали можно получить с помощью функции pg_ErrorMessage ().
Эта функция является основной рабочей лошадкой интерфейса с СУБД Post-
greSQL. Она отправляет запрос query на SQL-сервер и принимает результат операции. Полученное значение используется для извлечения результатов запроса.
Ниже приведен небольшой фрагмент программы, иллюстрирующий использование этой функции. Обратите внимание на многократное использование результата запроса, указатель на который помещается в переменную $result:
// Подключаемся к базе данных
$db = pg_Connect ("dbname=nntp") ;
if (!$db) {
echo "He удалось подключиться к серверу PostgreSQL . <br>" .
"Вероятно, у вас не настроены права доступа к системе!";
exit ;
}
// Теперь извлекаем список серверов
$result = pg_Exec($db,
"select * from server_list order by servid");
// Теперь определяем, сколько записей содержится в полученном
// результате
$numrecs = pg_NumRows ($result) ;
if ($numrecs > 0)
{
?>
<table>
<tr>
<th>Cepвep</th><th>Oписаниe</th><th>Oпpoc</th>
<th>3aписано</th>
</tr>
<?
// Теперь построчно считываем значения попей.
// Порядок следования определяется структурой таблицы
for ($i=0; $i<$numrecs; $i++)
{
$snum = pg_Result($resul.t ,$i ,0) ; // код сервера
$sname = pg_Result($resul.t , $i , 1) ; // доменное имя
$sdesc = pg_Result($result ,$i ,2) ; // его описание
$sused = pg_Result($result ,$i ,3) ; // опрашивается?
$sdate = pg_Result($result ,$i ,4) ; // дата ввода записи
?>
. . . продолжение программы . . .
|