Основы web-технологий


Сценарии стороны сервера. Технология PHP


Технология CGI позволяет создавать серверные приложения любой сложности, без ограничения возможностей программ CGI. Однако данная технология обладает рядом недостатков.

1.       При получении данных от клиента приложению приходится производить сложный разбор строки параметров запроса. Задача усложняется, если в запросе присутствуют строки в национальной кодировке.

2.       Содержимое документа HTML формируется приложением CGI. При изменении дизайна приходится осуществлять перекомпиляцию приложения.

3.       Приложения CGI, использующие интерфейс прикладных программ (API) локальной операционной системы сервера, плохо переносимы.

Одним из вариантов решения приведенных проблем является использование технологии PHP для динамического формирования документов HTML на стороне сервера. Технология PHP является технологией стороны сервера. Аббревиатура PHP раскрывается рекурсивно: "PHP: Hypertext Preprocessor". Основными сферами применения данной технологии являются создание серверных приложений и интерфейсов к базам данных.

Приложения PHP встраиваются в документы HTML в качестве сценариев, подобно сценариям JavaScript, однако, в отличие от JavaScript, сценарии PHP выполняются не пользовательским агентом, а специальной программой – проигрывателем сценариев PHP, которая является приложением CGI и запускается сервером. Пользовательский агент получает результат выполнения запрошенного им сценария и не видит кода самого сценария. Документ HTML, содержащий сценарий PHP, как правило, имеет специальное расширение, например, php3 или phtml. При получении запроса такого документа сервер выполняет следующие действия:

1.       Запрашивает локальную операционную систему о типе файла php3 или phtml.

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


3.      



Проигрыватель сценариев PHP анализирует содержимое документа, выполняя инструкции PHP и передавая остальное содержимое клиенту без изменений.

На рис. 3 приведено взаимодействие различных компонентов при запросе клиентом сценариев PHP.

Инструкции PHP внутри документа html располагаются внутри специальных скобок, состоящих из последовательностей символов "<?" и "?>" или "<?php" и "?>". Можно также для включения сценариев PHP использовать элемент SCRIPT с атрибутом language, имеющим значение "php". Текст, находящийся вне специальных скобок, и называемый статической частью документа, проигрывателем сценариев PHP не анализируется и передается клиенту без изменений. Фактически, статическая часть является шаблоном документа HTML.

Синтаксис языка сценариев PHP похож на синтаксис языков программирования C, C++, Java. Сценарий PHP представляет собой оператор PHP или последовательность операторов PHP, разделенных символами ";".

Основными объектами языка сценариев PHP являются переменные, выражения, операторы и функции.

Переменные в PHP не имеют типа. Тип переменной определяется хранимым в данной переменной значением. Тип переменной динамически изменяется в зависимости от контекста. В PHP различаются следующие типы:

целый - integer;

действительный - double;

строковый - string;

массив - array;

объект - object.

Преобразование типов осуществляется неявно, например, при подстановке переменных в качестве параметров функций, или явно, при указании типа, к которому нужно преобразовать значение переменной, перед именем.

Переменные различаются по именам. Имя переменной в PHP начинается с символа "$". Для определения переменной нужно присвоить ей значение при помощи операции присваивания. Способы создания нового значения переменной отличаются для различных типов.

Переменной скалярного типа (integer, double, string) можно присвоить в качестве значения соответствующую константу.



Массивы в PHP являются не набором переменных, а переменными некоторого определенного типа array. В языке сценариев PHP массивы ассоциативны. Это означает, что индексом массива может являться не только число, но и строка. Индекс ассоциативного массива называется ключом. Новый массив может быть создан либо при создании элемента массива, либо при помощи вызова array. Для создания нового элемента массива нужно при присваивании значения переменной после имени указать ключ в квадратных скобках. При этом имя переменной будет именем созданного массива, а значение в квадратных скобках – ключом для получения доступа к значению созданного элемента массива. В PHP массивы являются динамическими. При присваивании значения элементу массива проверяется, существует ли уже в массиве элемент с заданным ключом. Если существует, то его значение заменяется на новое. В противном случае создается новый элемент массива. Все элементы массива объединены в двусвязный список. В массиве имеется внутренний указатель текущего элемента. Имеется возможность просмотреть текущее значение указателя, а также переместить указатель на предыдущий или последующий элемент в списке, а также на начальный или конечный элементы списка. Таким образом, можно осуществить последовательный доступ к каждому элементу массива. Для элементов массива с целочисленными ключами ведется счетчик индексов. Значением счетчика является увеличенное на единицу максимальное в массиве значение целочисленного ключа (индекса). Если массив не содержит элементов с целочисленными ключами, то счетчик индексов имеет нулевое значение. Если при присваивании значения элементу массива не указывать ключа в квадратных скобках, то ключом для нового элемента будет значение счетчика индексов, который после создания нового элемента увеличится на единицу. Данная возможность позволяет добавлять в конец массива элементы с последовательными индексами.

Для создания массива с несколькими начальными элементами используется ключевое слово array, после которого в круглых скобках перечисляются присваиваемые элементам массива значения. В качестве ключей элементов используется счетчик индексов. Такое назначение ключей по умолчанию можно изменить при помощи операции "=>". Данная операция применяется в следующем виде:



ключ => значение

Если в списке значений array встречается подобная операция, то очередному элементу массива будет присвоен указанный ключ. Данная возможность используется для создания массивов со строковыми ключами, а также для пропуска значений целочисленных ключей (индексов).

Объекты в PHP служат для поддержки объектного программирования. Для создания нового объекта используется вызов new.

Переменным любого типа можно присваивать в качестве значения другие переменные, а также значения, возвращаемые функциями и методами объектов.

В PHP можно создавать ссылки на переменные. Ссылка – это имя переменной, отличное от заданного при определении. Для создания ссылки нужно определить переменную,  значением  которой будет имя ссылки. Если теперь присвоить значение переменной, в которой хранится имя ссылки, указав перед именем переменной двойной символ "$$", то будет создана ссылка, к которой можно обращаться по имени как к обычной переменной. При одновременной работе со ссылками и массивами возникает неопределенность, связанная с приоритетами символов "$" и квадратных скобок. Для разрешения данной неопределенности можно использовать фигурные скобки как символы явного определения приоритетов.

При выполнении сценария PHP интерпретатор определяет ряд переменных, связанных с параметрами сервера, протокола HTTP, самого интерпретатора, а также полученным запросом. Каждый орган управления формы, содержащийся в документе HTML, имеет атрибуты name и value. При разборе полученного от клиента запроса интерпретатор PHP создает переменные, именами которых являются значения атрибутов name, а значениями – значения атрибутов value соответствующих органов управления. Это упрощает разбор форм в сценариях PHP.

Важным понятием языка интерпретатора PHP является понятие выражения. Выражение – это константа, переменная или  составленная из них при помощи операций конструкция. Выражение может быть составной частью более сложного выражения. Каждое выражение имеет значение, которое называется значением выражения. Значением операции является ее результат. Тип значения выражения зависит от типов входящих в выражение переменных и констант, а также от операций.



Помимо типов, которые могут иметь переменные, значения выражений могут быть булевого типа. Выражения булевого типа могут принимать только значения FALSE или TRUE. Значения булевого типа не могут быть присвоены переменным, но иногда подставляются в функции и операторы. При подстановке переменных вместо булевых выражений происходит преобразование типа переменной к булевому. Для целых чисел значение FALSE имеет только 0, для строк – строки "" и "0". Операции языка интерпретатора PHP приведены в табл. 10.

Таблица 10

Операции PHP

Знак

Операция

Арифметические

+

Сложение



Вычитание

*

Умножение

/

Деление

%

Остаток от деления

Строковые

.

Конкатенация строк

Присваивание

=

Обычное присваивание

+=

Присваивание со сложением

–=

Присваивание с вычитанием

*=

Присваивание с умножением

/=

Присваивание с делением

%=

Присваивание с получением остатка

.=

Присваивание с конкатенацией

Побитовые

&

Побитовое умножение (И)

|

Побитовое сложение (ИЛИ)

~

Побитовое отрицание (НЕ)

Окончание табл. 10

Знак

Операция

Логические

and

Логическое И

or

Логическое ИЛИ

xor

Логическое исключающее ИЛИ

!

Логическое отрицание

&&

Логическое И

||

Логическое ИЛИ

Сравнение

==

Равно

!=

Не равно



Меньше



Больше

<=

Меньше или равно (не больше)

>=

Больше или равно (не меньше)

Сценарий PHP состоит из операторов. Помимо оператора вычисления выражения, существует ряд операторов, характерных для структурных языков. Некоторые операторы PHP имеют два синтаксиса: синтаксис языка C и модифицированный синтаксис для вставки HTML-кода внутрь операторов. В табл. 11 приведены основные операторы PHP. Операторы записаны с использованием синтаксиса языка C.

Таблица 11

Операторы PHP

Синтаксис

Оператор

if (cond1) {...}

elseif (cond2) {...}

...

else {...}

Ветвление

while (cond) {...}

Цикл с предусловием (цикл ПОКА)

do {...} while

(cond)

Цикл с постусловием (цикл ДО)

for (init; cond; expr) {...}

Цикл с предусловием

break

Безусловный переход на конец операторов while, do while, for и switch

continue

Безусловный переход на следующий цикл

Окончание табл. 11

Синтаксис

Оператор

switch (var) {

 case val1: ...

 case val2: ...

 ...

 default: ...

}

Выбор

function name(parameters)

 {...}

Определение функции

return val

Возврат значения

<


Синтаксис определения функции в интерпретаторе PHP отличается от синтаксиса языка C. Функция – это набор операторов или часть кода, выполняемая при разборе специальной операции, называемой вызовом функции. Для вызова функции указывается ее имя, за которым в круглых скобках следует набор параметров, передаваемых функции.

Пользовательские функции определяются при помощи оператора function. При определении функции указывается ее имя и список параметров. Параметры перечисляются через запятую. Каждый параметр считается локальной переменной функции. Внутри блока операторов функции могут определяться новые переменные. Каждая переменная, определенная на внутреннем уровне является локальной. Все обычные локальные переменные создаются в стеке при каждом вызове функции и уничтожаются после завершения.

Функции не имеют доступа к глобальным переменным. Для получения доступа к глобальным переменным последняя должна быть локально переобъявлена. Локальное переобъявление выполняется указанием ключевого слова global перед именем глобальной переменной, к которой необходимо получить доступ.

Помимо обычных (автоматических) локальных переменных, в функции можно определить статические переменные, которые создаются при определении функции и существуют все время пока выполняется программа. Для определения статической переменной перед ее именем нужно указать ключевое слово static. Статические переменные сохраняют свое значение после выхода из функции.

Функции могут возвращать значения. Для этого используется оператор return. Тип возвращаемого значения зависит от типа параметра оператора return.

Стандартно параметры передаются в функцию по значению. Это означает, что при вызове функции для каждого параметра создается локальная переменная, куда копируется значение передаваемого параметра. В PHP имеется возможность организовать передачу параметров функции по ссылке. Для этого в списке параметров при определении функции перед именем параметра необходимо указать символ "&". При передаче по ссылке при вызове функции для передаваемого параметра создается еще одно имя, которое является именем параметра или, что то же самое, именем локальной переменной функции. При передаче по ссылке у функции имеется возможность изменять значение передаваемой переменной. Если необходимо при некоторых вызовах одной и той же функции передавать параметр по значению, а при других по ссылке, то функция должна быть определена обычным образом. При этом при вызове функции с передачей параметра по ссылке следует в списке параметров перед соответствующим параметром указать символ "&".



Параметры функции могут иметь значение по умолчанию. Для указания значения параметра по умолчанию в списке параметров после имени параметра ставится символ "=", за которым следует необходимое значение. Если какой-либо параметр имеет значение по умолчанию, то все последующие параметры в списке также должны иметь значения по умолчанию. При вызове функций со значениями параметров по умолчанию соответствующие параметры вызова можно опустить.

В интерпретаторе PHP имеются встроенные функции. Встроенные функции определены в самом интерпретаторе или в загружаемых модулях. В табл. 12 приведены основные встроенные функции PHP.

Таблица 12

Встроенные функции PHP

Функция

Описание

Математические функции

mixed abs(mixed x)

Абсолютное значение аргумента x

int ceil(double x)

Наименьшее целое, большее x

int floor(double number)

Наибольшее целое, меньшее x

Продолжение табл. 12

Функция

Описание

double round(double x)

Округление

string decbin(int dec)

Преобразование десятичного числа в двоичное

string dechex(int dec)

Преобразование десятичного числа в шестнадцатеричное

string decoct(int dec)

Преобразование десятичного числа в восьмеричное

int bindec(string bin)

Преобразование двоичного числа в десятичное

int hexdec(string hex)

Преобразование шестнадцатеричного числа в десятичное

int octdec(string oct)

Преобразование восьмеричного числа в десятичное

int rand([int min,

 int max])

Получить случайное число

void srand(int seed)

Инициализировать генератор случайных чисел

int getrandmax()

Получить максимальное число, возвращаемое rand

int mt_rand([int min,

 int max])

Получить случайное число

void mt_srand(int seed)

Инициализировать генератор случайных чисел

int mt_getrandmax()

Максимальное число, возвращаемое mt_rand

double sqrt(double x)

Квадратный корень

double exp(double x)

Экспонента

double pow(double x,

 double y)

xy

double log(double x)

Натуральный логарифм

double log10(double x)

Десятичный логарифм

double pi()

p

double cos(double x)

Косинус

double sin(double x)

Синус

double tan(double x)

Тангенс

double acos(double x)

Арккосинус

double asin(double x)

Арксинус

double atan(double x)

Арктангенс

double atan2(double y,

 double x)

Арктангенс y/x

Обработка строк

void print(string str)

Вывести строку в стандартный поток вывода

int printf(string format,

 mixed arg, ...)

Форматированный вывод

string sprintf(

 string format,

 mixed arg, ...)

Форматировать строку

Продолжение табл. 12

Функция

Описание

string addslashes(

 string str)

Экранирование символов "$", "\", "'" и 0 в строке str

string stripslashes(

 string str)

Удалить экранирующие символы из строки

string chr(int ascii)

Получить символ с заданным кодом

int ord(string ch)

Код символа

string convert_cyr_string(

 string str, string from,

 string to)

Перевод строки из одной русскоязычной кодировки в другую

void parse_str(string str)

Разбить строку запроса и создать соответствующие переменные

Обработка массивов

int count(mixed arr)

Число элементов массива

mixed current(array arr)

Текущий элемент массива

mixed pos(array arr)

Псевдоним current

array each(array arr)

Получить в виде массива пару ключ/значение текущего элемента arr

mixed key(array arr)

Ключ текущего элемента массива

mixed reset(array arr)

Установить внутренний указатель массива на начальный элемент

mixed prev(array arr)

Переместить указатель массива на предыдущий элемент

mixed next(array arr)

Переместить указатель массива на следующий элемент

mixed end(array arr)

Установить внутренний указатель массива на последний элемент

void sort(array arr)

Сортировка массива

void rsort(array arr)

Сортировка массива в обратном порядке

void asort(array arr)

Сортировка ассоциативного массива array

void arsort(array arr)

Сортировка ассоциативного массива arr в обратном порядке

int ksort(array arr)

Сортировка ассоциативного массива по ключам

Процессы

string exec(

 string command [,

 array output [,

 int return_code]]

)

Выполнить команду command оболочки UNIX. Стандартный вывод будет записан в массив строк output, код возврата – в переменную result_code. Возвращается последняя строка стандартного потока вывода

string system(

 string cmd [,  int ret])

Выполнить команду и возвратить результат

int chdir(string dir)

Изменить текущий рабочий каталог

void putenv(string str)

Установить значение переменной окружения

Продолжение табл. 12

Функция

Описание

string getenv(string var)

Получить значение переменной окружения

void sleep(int sec)

Задержка выполнения текущего процесса на sec секунд

void usleep(int us)

Задержка выполнения текущего процесса на us микросекунд

int sem_get(int key

 [, int max [, int perm]])

Получить идентификатор семафора

int sem_acquire(int sem)

Уменьшение счетчика семафора

int sem_release(int sem)

Увеличение счетчика семафора

Файлы и каталоги

int copy(string src,

 string dest)

Копировать файл

int rename(string old,

 string new)

Переименовать файл

int unlink(

 string filename)

Удалить файл

int readfile(

 strinf filename)

Прочитать текстовый файл в стандартное устройство вывода

array file(string filename)

Прочитать текстовый файл в массив строк

int filesize(

 string filename)

Размер файла

int file_exists(

 string filename)

TRUE, если файл существует

int fopen(string filename,

 string mode)

Открыть файл

string fgetc(int fd)

Прочитать символ из файла

string fgets(int fd,

 int maxlen)

Прочитать из файла строку максимальной длиной maxlen

int fputs(int fd, string str

 [, int length])

Записать строку в файл

string fread(int fp,

 int len)

Бинарное чтение файла

int fwrite(int fd,

 string str, int len)

Бинарная запись в файл

int ftell(int fd)

Текущая позиция указателя

int fseek(int fd, int offset)

Переместить внутренний указатель файла

int rewind(int fd)

Переместить указатель файла на начало

int feof(int fd)

TRUE, если дескриптор fd указывает на конец файла

int fclose(int fd)

Закрыть файл

int popen(

 string command,

 string mode)

Запустить процесс command и возвратить дескриптор стандартного потока ввода или стандартного потока вывода созданного процесса

Продолжение табл. 12

Функция

Описание

int pclose(int fd)

Закрыть поток, открытый popen

int mkdir(string dir,

 int mode)

Создать директорию

int rmdir(string dir)

Удалить директорию

int opendir(string dir)

Открыть директорию

string readdir(int fd)

Получить имя очередного файла в каталоге

void rewinddir(int fd)

Переместить указатель каталога на первый файл

void closedir(int fd)

Закрыть директорию

void clearstatcache()

Очистить файловый кэш

flush()

Очистка буфера стандартного вывода

int fsockopen(string host,

 int port)

Открыть сокет

Дата и время

int time()

Получить текущее время в формате UNIX

string date(string format,

 int timestamp)

Строковое представление локальной даты и времени в указанном формате

string gmdate(

 string format,

 int timestamp)

Преобразовать дату и время GMT в формате UNIX в форматированную строку

array getdate(

 int timestamp)

Преобразовать дату и время в ассоциативный массив

int mktime(int hour,

 int minute, int second,

 int month, int day,

 int year)

Дата и время в формате UNIX

int gmmktime(int hour,

 int minute, int second,

 int month, int day,

 int year)

Дата и время GMT в формате UNIX

TCP/IP, HTTP, CGI, PHP

string gethostbyname(

 string host)

Получить IP-адрес хоста

string gethostbyaddr(

 string addr)

Получить имя хоста по IP-адресу

int header(string hdr)

Отправить заголовок HTTP

string htmlspecialchars(

 string str)

Преобразовать специальные символы HTML в строке str в escape-последовательности

int isset()

TRUE, если переменная определена

void eval(string code)

Обработка code в качестве вложенного сценария

void exit()

Завершить текущий сценарий

Окончание табл. 12

Функция

Описание

int phpinfo()

Вывод информации о текущей реализации PHP

string phpversion()

Вывод информации о текущей версии PHP

<


Более подробную информацию о встроенных функциях языка интерпретатора PHP можно найти в руководствах по этому языку.

4. ПУБЛИКАЦИЯ БАЗ ДАННЫХ В INTERNET

Публикация баз данных в Internet является одной из наиболее популярных и быстро развивающихся отраслей Web. Под публикацией БД в Internet будем понимать создание программного обеспечения, позволяющего частично или полностью осуществлять работу с удаленной БД при помощи клиента Web. Как правило, при публикации предоставляется возможность просмотра содержимого БД, однако в общем случае подразумевается также возможность модификации и администрирования БД. Публикация в Internet подразумевает также публикацию в локальных сетях, созданных по технологии Internet (Intranet). С точки зрения создания программного обеспечения БД, публикацию БД можно рассматривать с двух сторон:

1.  Создание программного обеспечения БД, формирующего отчеты в виде документов HTML.

2.  Создание Web-интерфейса к БД.

Публикация в Internet имеет следующие преимущества по сравнению с обычными локальными и сетевыми БД:

1)    возможность удаленного доступа к БД через глобальную или локальную сеть;

2)    использование преимуществ протокола HTTP при передаче различной, в том числе мультимедийной, информации;

3)    наличие стандартного интерфейса у БД.

Web-интерфейс является стандартом де-факто для любого программного обеспечения, в том числе БД.

Существует два основных подхода к публикации БД в Internet. Первый подход подразумевает формирование статических документов HTML из содержимого БД с последующим доступом к сформированным документам при помощи сервера Web. При модификации содержимого БД осуществляется обновление документов HTML. Программу, осуществляющую преобразование содержимого БД в набор документов

HTML, будем называть преобразователем. На рис. 4 показано взаимодействие программ при публикации БД в Internet в рамках первого подхода.

Публикация БД в Internet  в рамках первого подхода сводится к написанию программы-преобразователя, которая будет периодически или при изменении БД полностью или частично модифицировать документы HTML. К недостаткам первого подхода можно отнести сложности модификации БД и поиска в БД.



Второй подход состоит в динамической генерации документов HTML в соответствии с запросами пользователя Web. При запросе пользователя к БД сервер Web запускает программу, которая передает запрос БД, получает ответ, формирует в соответствии с полученным ответом документ HTML и отправляет его клиенту Web. Программа, осуществляющая работу с БД, может быть создана с использованием любой технологии стороны сервера (например, CGI), либо быть сценарием стороны сервера (например, PHP). На рис. 5 показано взаимодействие программ при публикации БД в Internet с использованием технологии CGI.

Приложение CGI фактически является в данном случае посредником между СУБД и клиентом Web. Архитектура системы на рис. 5 является трехзвенной, в отличие от двухзвенной архитектуры "Клиент-Сервер". Общий вид трехзвенной архитектуры изображен на рис. 6.

При публикации БД в Internet с использованием технологии CGI тонким клиентом является клиент Web, толстым клиентом – приложение CGI, а сервером – СУБД, которая в данном случае называется сервером баз данных.

Приведенные два подхода к публикации БД в Internet могут комбинироваться. В любом случае, при публикации существует программа, которая обращается к СУБД для работы с БД. Как правило, взаимодействие между программой, работающей с БД, и СУБД осуществляется посредством запросов на каком-либо языке запросов. Стандартным языком запросов является язык SQL. Данный язык содержит команды создания таблиц и схемы БД, добавления записей в таблицу, извлечения данных из БД, модификации и удаления записей в таблице. SQL запросы передаются от приложения к серверу БД посредством какого-либо зависящего от реализации сервера средства межпроцессного взаимодействия. Наиболее перспективным является использование интерфейса сокетов, поскольку в этом случае запросы могут передаваться между различными хостами. Существуют также реализации СУБД в виде библиотек статической компоновки. В этом случае код СУБД входит в код программы, работающей с БД, что приводит к увеличению размера загрузочного модуля приложения и неэффективному расходу памяти. Поэтому такой способ реализации СУБД целесообразно применять только для однозадачных операционных систем.



Программный интерфейс сервера БД зависит от реализации. Как правило, производители СУБД поставляют вместе с сервером БД библиотеки, в которых реализован API для доступа к БД. Ниже приведен список наиболее распространенных в настоящее время СУБД (серверов БД):

BDE;

ODBC;

InterBase Server;

Microsoft SQL Server;

MySQL;

mSQL;

PostgreSQL;

SyBase;

Informix;

Oracle.

Программный интерфейс, как правило, включает средства инициализации СУБД, установления связи с БД, передачи запросов БД и разбора ответов от сервера. Рассмотрим подробнее API некоторых серверов БД.

Фирма Inprise поставляет вместе со своей СУБД BDE два программных интерфейса различного уровня. Программный интерфейс низкого уровня (IDAPI) - это библиотека функций для доступа к базам данных в различных форматах. Интерфейс высокого уровня - это библиотека компонентов для сред визуального программирования Delphi и C++Builder, которая использует интерфейс низкого уровня. В табл. 13 приведены основные классы библиотеки компонентов BDE.

Таблица 13

Основные классы библиотеки компонентов BDE

Название класса

Описание

TDataModule

Контейнер для хранения остальных компонентов BDE

TDatabase

База данных. Содержит название БД или папку с таблицами БД

TQuery

SQL запрос. Включает содержимое запроса и метод для его отправки серверу

TDataSet

Набор данных. Включает данные, полученные от сервера в качестве ответа

Вместе с сервером MySQL фирмы TcX поставляется библиотека, реализующая API для доступа к БД MySQL. В табл. 14 приведены основные функции этой библиотеки.

Таблица 14

Основные функции библиотеки MySQL

Функция

Описание

MYSQL *mysql_init(

 MYSQL *mysql);

Инициализация структуры MYSQL для последующего подключения к СУБД

MYSQL *mysql_connect(

 MYSQL *mysql,

 const char *host,

 const char *user,

 const char *passwd);

Установка соединения с СУБД без соединения с БД

int mysql_create_db(

 MYSQL *mysql,

 const char *db);

Создание новой БД. Возвращает 0 в случае успешного завершения

int mysql_select_db(

 MYSQL *mysql,

 const char *db);

Установить соединение с БД. Возвращает 0 в случае успешного завершения

Продолжение табл. 14

Функция

Описание

int mysql_query(

 MYSQL *mysql,

 const char *query);

Отправить запрос SQL. Возвращает 0 в случае успешного завершения

int mysql_real_query(

 MYSQL *mysql,

 const char *qyery,

 unsigned int length);

Отправить запрос SQL, содержащий двоичные данные. Возвращает 0 в случае успешного завершения

MYSQL_RES *

mysql_store_result(

 MYSQL *mysql);

Получить результат последнего запроса

unsigned int

mysql_num_fields(

 MYSQL_RES *result);

Количество полей в полученном результате

int mysql_num_rows(

 MYSQL_RES *result);

Количество записей в полученном результате

MYSQL_FIELD *

mysql_fetch_fields(

 MYSQL_RES *result);

Возвращает массив структур MYSQL_FIELD, содержащих поля полученного ответа

MYSQL_ROW

mysql_fetch_row(

 MYSQL_RES *result);

Выбрать текущую запись из набора и переместить указатель на следующую запись

void mysql_data_seek(

 MYSQL_RES *res,

 unsigned int offset);

Перемещение указателя в наборе данных на указанную позицию

my_bool mysql_eof(

 MYSQL_RES *res);

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

void mysql_free_result(

 MYSQL_RES *result);

Освобождает память, занятую результатами последнего запроса

Окончание табл. 14

Функция

Описание

int mysql_drop_db(

 MYSQL *mysql,

 const char *db);

Уничтожение БД. Возвращает 0 в случае успешного завершения

unsigned int mysql_errno(

 MYSQL *mysql);

Возвращает номер последней ошибки

char *mysql_error(

 MYSQL *mysql);

Возвращает строку с сообщением о последней ошибке

void mysql_close(

 MYSQL *mysql);

Разрыв соединения с сервером БД

<


В настоящее время также разработаны API доступа к БД для сценариев стороны сервера, в частности, для PHP. Взаимодействие программ при публикации БД с использованием технологии PHP изображено на рис. 7.

Библиотеки для доступа к БД подключаются к проигрывателю сценариев PHP в виде внешних загружаемых модулей. В настоящее время разработаны модули для большинства распространенных серверов БД. Если подключен модуль, реализующий API доступа к БД, то в сценарии PHP определяются специальные, зависящие от сервера БД, функции.

В табл. 15 приведены основные функции для доступа к БД MySQL.

Таблица 15

Основные функции PHP для доступа к БД MySQL

Функция

Описание

int mysql_affected_rows(int [link_identifier] )

Количество столбцов, использованных предыдущими mysql операциями

int mysql_close(int [link_identifier] )

Закрывает mysql соединение

int mysql_connect(string [hostname] [:port] , string [username] , string [password] )

Открывает соединение с mysql сервером

int mysql_create_db(string database name, int [link_identifier] )

Создает базу данных mysql

int mysql_data_seek(int result_identifier, int row_number)

Перемещает внутренний указатель результата

int mysql_db_query(string database, string query, int [link_identifier] )

Посылает mysql запрос

int mysql_drop_db(string database_name, int [link_identifier] )

Удаляет базу данных mysql

int mysql_errno(int [link_identifier] )

Возвращает номер сообщения об ошибке предыдущей операции mysql

string mysql_error(int [link_identifier] )

Возвращает текст сообщения об ошибке предыдущей операции mysql

array mysql_fetch_array(int result)

Выбрать результат как ассоциативный массив

object mysql_fetch_field(int result, int [field_offset] )

Получает информацию о столбце из результата и возвращает ее как объект

Продолжение табл. 15

Функция

Описание

array mysql_fetch_lengths(int result)

Получает максимальный размер данных для каждого выходного значения

object mysql_fetch_object(int result)

Получает строку результата как объект

array mysql_fetch_row(int result)

Получите строку результата как пронумерованный массив

string mysql_field_name(int result, int field_index)

Получает имя определенного поля в результате

int mysql_field_seek(int result, int field_offset)

Устанавливает указатель запроса в определенное поле

string mysql_field_table(int result, int field_offset)

Получает имя таблицы, в которой находится указанное поле

string mysql_field_type(int result, int field_offset)

Получает тип указанного поля в результате

string mysql_field_flags(int result, int field_offset)

Получает флаги, связанные с указанным полем в результате

int mysql_field_len(int result, int field_offset)

Возвращает длину указанного поля

int mysql_free_result(int result)

Освобождает память результата

int mysql_insert_id(int [link_identifier] )

Получает id сгенерированный предыдущим выполнением SQL-запроса INSERT

int mysql_list_fields(string database_name, string table_name, int [link_identifier] )

Показывает список полей mysql в результате запроса

int mysql_list_dbs(int [link_identifier] )

Показывает список доступных Баз Данных на сервере

int mysql_list_tables(string database, int [link_identifier] )

Показывает список таблиц в базе данных mysql

Окончание табл. 15

Функция

Описание

int mysql_num_fields(int result)

Получает количество полей в результате

int mysql_num_rows(int result)

Получает количество столбцов в результате

int mysql_pconnect(string [hostname] [:port] , string [username] , string [password] )

Открывает устойчивое соединение с mysql-сервером

int mysql_query(string query, int [link_identifier] )

Отправляет SQL-запрос на mysql

int mysql_result(int result, int row, mixed field)

Получает данные результата

int mysql_select_db(string database_name, int [link_identifier] )

Выбирает Базу Данных mysql

string mysql_tablename(int result, int i)

Получает имя таблицы, содержащей указанное поле

<


Более подробную информацию о доступе к базам данных MySQL из сценариев PHP можно получить в руководствах по СУБД MySQL и языку интерпретатора PHP.

Литература

1. Золотов С. Протоколы Internet. – СПб.: BHV – Санкт-Петербург,

1998. – 304 с.

2. Семенов Ю. А.  Протоколы и ресурсы Internet. – М.: Радио и связь,

1996. – 320 с.

3. Фролов А. В., Фролов Г. В. Сервер Web своими руками. ­– М.: ДИАЛОГ-МИФИ, 1997. (Библиотека системного программиста, т. 29).

4. Браун М., Ханнатт Д. HTML 3.2 в подлиннике. – СПб.: BHV – Санкт-Петербург, 1997.

5. Фролов А. В., Фролов Г. В. Javascript. – М.: ДИАЛОГ-МИФИ, 1998. (Библиотека системного программиста, т. 34).

6. Тихомиров Ю. Microsoft SQL Server 7.0 в подлиннике. – СПб.: BHV – Санкт-Петербург, 1999. – 720 с.

7. Яргер Р., Риз Дж., Кинг Т. MySQL и mSQL. Базы данных для небольших предприятий и Интернета – СПб.: Символ-Плюс, 2000. – 560 с.

8. Фролов А. В., Фролов Г. В. Microsoft Visual J++. Создание приложений и аплетов на языке Java. В 2-х ч. – М.: ДИАЛОГ-МИФИ, 1997. (Библиотека системного программиста, т. 30, 32).

9. Фролов А. В., Фролов Г. В. Разработка приложений для Internet. – М.: ДИАЛОГ-МИФИ, 1997. – 286 c. (Библиотека системного программиста, т. 31).

10. Храмцов П. Б. Лабиринт Internet. Практическое руководство. – М.: ”Электронинформ”, 1996. – 256 c.

11. Джамса  К.,  Коуп  К.  Программирование для Internet в среде Windows: Пер. с англ. – СПб.: Питер, 1996. – 688 с.

12. Барфилд Э.,  Уолтерс Б.  Программирование "клиент-сервер" в локальных вычислительных сетях: Пер.  с англ. – М.: Информационно-издательский дом "Филинъ", 1997. – 424 с.


Содержание раздела