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


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

16.3.2.4. Загрузка массива значений: pg_fetch_array

array pg_fetch_array (int result, int row [, int result_type] )

Функция возвращает массив, который соответствует загруженной строке, или false, если все строки уже считаны. Эта функция представляет собой расширенную версию функции pg_fetch_row() (см. раздел 16.3.2.6). Эта функция не только сохраняет данные в массиве с целочисленными индексами элементов, но и помещает данные в ассоциативный массив, в котором в качестве ключей используются имена полей.

Третий, необязательный аргумент result_type определяет тип возвращаемого массива и должен представлять собой константу, имеющую одно из следующих значений: PGSQL_ASSOC, PGSQL_NUM или PGSQL_BOTH.

Вот несколько примеров использования этой функции:
<?php
$conn = pg_pconnect ("dbname=publ.isher");
if (!$conn) {
          echo "Ошибочка вышла, однако...\n";
          exit;
}
$result = pg_Exec ($conn, "SELECT * FROM authors");
if (! $result) { '
          echo "Ошибка при считывании данных об авторах. \n";
          exit;
$arr = pg_fetch_array ($result, 0);
echo $arr[0] . " <- массивв\n";

$arr = pg_fetch_array ($result, 1);
echo $arr["author"] . " <- массив\n";
?>

16.3.2.5. Загрузка строки как объекта: pg_fetch_object

object pg_fetch_object (int result, int row [, int result_type])

Функция создает объект, поля (свойства) которого соответствуют загруженной строке результата запроса, или возвращает false, если строки с таким номером нет.

Функция pg_fetch_obj ect () в целом похожа на рассмотренную выше функцию pg_fetch_array () с одним незначительным отличием: возвращается объект, а не массив. Это означает, что вы можете получить доступ к данным только по именам полей, но не по их смещениям, поскольку числа не могут использоваться в качестве имен свойств.

Третий, необязательный аргумент result_type определяет тип возвращаемого массива и должен представлять собой константу, имеющую одно из следующих значений: PGSQL_ASSOC, PG5QL NUM или PGSQL BOTH.

16.3.2.6. Загрузка записи: pg_fetch_row

array pg_fetch_row (int result, int row)

Функция возвращает массив, который соответствует одной из записей, полученных в результате выполнения запроса, или false, если записи с номером, заданным аргументом row, нет. Функция pg_fetch_row() загружает одну запись из результата операции, идентифицируемого аргументом result. Запись возвращается в виде массива. Каждое поле записи помещается в очередной элемент массива с числовым ключом, номер которого начинается с нуля.

Вот пример использования этой функции:
<?php
$conn = pg_pconnect ("dbname=publisher" ) ;
if (!$conn) {
       echo "Ошибка при подключении к базе данных. \n";
       exit ;
}
$result = pg_Exec ($conn, "SELECT * FROM authors");
if (!$result) {
       echo "Ошибка при выборке записей. \n";
       exit ;
}
// Сколько записей мы получили?
$num = pg_numrows ($result) ;

for ($i=0; $i<$num; $i++) {
     $r" = pg_fetch_row($result, $i);
     for ($j=Q; $j<count($r) ; $j++) {
       echo "$r [$j ]  " ;
     }
     echo "<BR>";
     }
     ?>

16.3.2.7. Освобождение памяти: pg_freeresult

int pg_freeresult (int result_id)

Необходимость в вызове функции pg_f reeresult()возникает только в том случае, если вам необходимо минимизировать объем памяти, занимаемый вашей программой в ходе работы. Вся память, выделенная PHP-программе, автоматически освобождается при ее завершении. Но если в ходе работы программы вы используете несколько запросов, то после обработки данных вы можете освободить память, выделяемую для хранения результатов. Аргументом функции является идентификатор результата выполнения SQL-запроса.

16.3.2.8. Считать поле OID: pg getlastoid

int pg_getlastoid (int result_id)

Одной из особенностей PostgreSQL является наличие для любой записи в базе данных уникального идентификатора — OID (object identificator), который при необходимости может использоваться в качестве ключа для любой таблицы данных.

Функция pg_ge tlastoid () позволяет извлечь этот идентификатор для последней введенной с помощью INSERT записи. Если такая операция завершилась успешно, функция возвращает положительное целое число, представляющее собой OID этой записи. Если же команда вставки завершилась ошибкой либо если последняя операция, выполненная с помощью pg_exec() (см. раздел 16.3.2.3), отличалась от INSERT, функция возвращает -1.

16.3.2.9. Количество строк в результате операции: pg_nurnrows

int pg_numrows (int result_id)

Функция pg_numrows() возвращает количество строк, полученных в результате выполнения SQL-запроса. Аргумент должен представлять собой указатель на результат операции, возвращаемый функцией pg_exec (см. раздел 16.3.2.3). В случае ошибки функция возвращает -1.

16.3.2.10. Отправка ASCIZ-строки: pg_put_line

bool pg_put_line ([resource connection_id, string data])

Функция pg_put_line() отправляет ASCIZ-строку непосредственно на сервер PostgreSQL.

Эта функция используется, например, для высокоскоростной вставки записей в таблицу. Последний нулевой символ дописывается к строке автоматически. В случае успешного завершения функция возвращает true, а при возникновении ошибки —false.

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

Вот пример организации высокоскоростной вставки информации в базу данных:
<?php
       $соnn = pg_pconnect ("dbname=foo");
       pg_exec($conn, "create table bar (a int4, b char(16), d floats)");
       pg_exec($conn, "copy bar from stdin");
       pg_put_line($conn, "3\1Первая запись\t4. 5\n");
       pg_put_line($conn, "4\1Последняя запись\t7.11\n");
       pg_put_line($conn, "\\.\n");
       pg_end_copy($conn) ;
?>

16.3.2.11. Считывание результатов операции: pg_result

mixed pg_result (int result_id, int row_number, mixed fieldname)

Функция pg_result() позволяет извлечь отдельные значения из результата операции, сформированного в результате выполнения pg_Exec () (см. раздел 16.3.2.3). Аргументы row_number и fieldname указывают, какое конкретно значение из возвращенного массива данных вы хотите извлечь. Нумерация строк результата запроса начинается с нуля. Вместо имени поля вы можете использовать номер поля, который также начинается с 0.

Необходимо отметить, что PostgreSQL содержит достаточно большое количество встроенных типов данных, но непосредственно поддерживается только несколько из них. Так, все варианты целых чисел, логические значения и oid-типы возвращаются как целочисленные значения. Все прочие типы, включая массивы, возвращаются как строки, отформатированные в соответствии со стандартными соглашениями PostgreSQL.

16.3.3. Определение параметров полей

16.3.3.1. Проверка поля на «пустоту»: рg fieldisnull

int pg_fieldisnull (int result_id, int row, mixed field)

Функция проверяет, является ли запрашиваемое поле результата операции пустым или нет. Возвращаемый результат равен 0, если поле в заданной строке отлично от NULL, и 1 — в противном случае. Поля могут указываться как по смещению, так и по их именам. Нумерация полей в записи начинается с нуля.

16.3.3.2. Считывание имени поля: pg_fieldname

string pg_fieldname (int result_id, int field_number)

Функция pg_fieldname () возвращает имя поля, занимающего заданную аргументом field_number позицию в результате операции, при чем этот результат адресуется идентификатором result_id. Нумерация полей начинается с 0.

16.3.3.3. Определение номера поля: pg_fieldnum

int pg_fieldnum (int result_id, string field_name)

Функция pg_fieldnum() возвращает номер поля, которое соответствует столбцу результата операции с заданным именем. Нумерация полей начинается с 0. В случае ошибки эта функция возвращает -1.

16.3.3.4. Длина печатного представления: pg_fieldprtlen

int pg_fieldprtlen (int result_id, int row_number, string field_name)

Функция pg_fieldprtlen() возвращает реальную длину (количество знаков) печатного представления заданного значения результата SQL-запроса. Нумерация строк начинается с 0. В случае ошибки функция возвращает -1.

16.3.3.5. Внутренний размер поля: pg_fieldsize

int pg_fieldsize (int result_id, int field_number)

Функция pg_fieldsize() возвращает размер (в байтах) внутренней области памяти, занимаемой результатом SQL-запроса, указанным идентификатором result_id. Нумерация полей начинается с 0. Если функция возвращает -1, это означает, что поле имеет переменную длину. В случае недопустимого набора аргументов функция возвращает false.

16.3.3.6. Считывание типа данных поля: pg_fieldtype

string pg_fieldtype (int result_id, int field_number)

Функция pg_fieldtype () возвращает строку, содержащую название типа задан- ного поля. Нумерация поля начинается с 0.

16.3.3.7. Считывание количества полей: pg_numfields

int pg_numfields (int result_id)

Функция pg_numf i elds () возвращает количество полей (столбцов) для результата SQL-запроса, идентифицируемого аргументом result_id. В случае ошибки функция возвращает -1.

См..также описание функций pg_numrows() (раздел 16.3.2.9) и pg_cmdtuples() (раздел 16.3.2.1).

16.3.4. Работа с BLOB-объектами

16.3.4.1. Закрытие указателя на BLOB: pgjoclose

void pg_loclose (int fd)

Функция pg_loclose () закрывает указатель на поле BLOB. Аргумент fd должен представлять собой дескриптор файла BLOB, полученный в результате вызова функции pg_loopen() (см. раздел 16.3.4.5).

16.3.4.2. Создание BLOB: pgjocreate

int pg_locreate (int conn)

Функция pg_locreate() создает новый BLOB-объект и возвращает его OID в качестве результата. Аргумент conn должен указывать на соединение с базой данных. BLOB-объект всегда создается с доступом как по чтению, так и по записи.

16.3.4.3. Экспортирование BLOB в файл: pg_loexport

boot pg_loexport (int old, int file [, int connection_id])

Функция выполняет экспортирование BLOB-объекта в файл. Аргумент old задает идентификатор BLOB-объекта, предназначенного для экспортирования, а аргумент filename задает имя файла, в который выгружается данный объект. В случае ошибки функция возвращает false.

совет
       Не забывайте, что работа с BLOB-объектами в PostgreSQL должна проводиться в рамках транзакции.

16.3.4.4. Импортирование BLOB из файла: pgjoimport

int pg_\oimport (int file [, int connection_id])

Аргумент filename задает путевое имя файла, содержимое которого «закачивается» в базу данных как BLOB. В случае ошибки функция возвращает false, а если операция завершена успешно — OID вновь созданного объекта.

совет
      Не забывайте, что работа с BLOB-объектами в PostgreSQL должна проводиться в рамках транзакции.

16.3.4.5. Открытие BLOB: pgjoopen

int pg_loopen (int conn, int objoid, string mode)

Функция pg_loopen () открывает BLOB и возвращает дескриптор файла, обеспечивающий доступ к его содержимому. Внутрь этого дескриптора помещается также вся необходимая информация о соединении с базой данных. Имейте в виду, что вы не должны закрывать соединение для окончания работы с этим дескриптором файла. Аргумент objloid должен указывать на корректный OID BLOB-объекта, а аргумент mode может принимать одно из значений: r, w или rw.

16.3.4.6. Чтение данных из BLOB: pg_loread

string pg_loread (int fd, int len)

Функция pg_loread() производит считывание до len очередных байтов из BLOB- объекта и возвращает полученные значения в виде строки. Аргумент fd должен содержать дескриптор файла, связанного с таким объектом, a len задает максимальный размер фрагмента объекта, считываемого при вызове функции.

16.3.4.7. Считывание всего BLOB: pgjoreadall

void pg_loreadall (int fd)

Функция pg_loreadall () считывает содержимое BLOB и передает его непосредственно в программу-навигатор (!!!) после отправки всех необходимых заголовков. Используется для упрощения работы с такими объектами, как изображения или звуковые файлы.

16.3.4.8. Удаление BLOB: pgjounlink

void pg_lounlink (int conn, int lobjid)

Функция pg_lounli nk () удаляет из базы данных BLOB с указанным OID.

16.3.4.9. Запись BLOB: pgjowrite

int pg_lowrite (int fd, string buf)

Функция pg_lowrite() производит запись в BLOB-объект строкового значения буфера buf, идентифицируемого дескриптором fd. Функция возвращает количество записанных байтов или false, если в ходе записи была обнаружена ошибка.

назад
далее

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