И все-таки, почему 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, если в ходе записи была обнаружена ошибка.
|