PHP-4 Эффективная работа


И все-таки, почему PostgreSQL?
Как перестать беспокоиться и начать работать с PostgreSQL
Функции обслуживания СУБД PostgreSQL

16.3.Функции обслуживания СУБД 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) ; // дата ввода записи
                   ?>
. . . продолжение программы . . .
назад
далее

Сайт управляется системой uCoz