Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MySQL. Библиотека профессионала - Аткинсон Л

..pdf
Скачиваний:
166
Добавлен:
24.05.2014
Размер:
10.41 Mб
Скачать

402 Глава 19. PHP

остальных функций. Функция создает постоянное со единение. Оно будет сохранено после завершения сценария на случай повторного использования. Такие соединения закрывать не нужно.

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

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

<html>

<head>

<body>

Открытие постоянного $dblink

Выбор базы данных

</body>

Извлечение данных

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

функции

 

Эта функция принимает в качестве аргумента текст SQL

инструкции плюс идентификатор соединения, полученный от функции

connect

или mysql_pconnect

и возвращает идентификатор результирующего

набора записей. В случае ошибки возвращается нуль.

Функция mysql_result

извлекает значение одной ячейки, но гораздо удобнее

пользоваться функцией

 

или

 

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

позволяет эффективно применять их в цикле while.

Рассмотрим пример, показанный в листинге 19.2. Этотсценарий извлекает записи из таблицы user, оформляя результаты запроса в виде HTML таблицы. Обратите внимание на то, что сценарий пытается подключиться к серверу от имени пользова теля root с явно неправильным паролем. Если будете экспериментировать с этим сценарием, подставьте корректные значения имени пользователя и пароля.

Извлечение данных 403

<html>

<head>

</head>

<body>

Открытие постоянного соединения.

"root",

not connect to

Выбор базы данных

not select

Выполнение запроса.

"SELECT User, Host FROM user ORDER BY 1,2";

not

execute

(mysql_errno

mysql_error

Получение информации о столбцах.

while($field

Извлечение записей. while($row

foreach($row as $r)

</body>

404Глава 19. PHP

Вэтом примере ведется тщательный контроль ошибок. Многие в случае ошибки возвращают FALSE. Внутри инструкций if отображается сообщение об ошибке, за которым следуют номер ошибки и ее описание, полученные от сервера

MySQL.

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

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

Изменение данных

Запросы на вставку или обновление данных не возвращают наборы записей. Они тоже выполняются с помощью функции mysql_query но вызывать функцию f нет необходимости. Если требуется узнать число добавленных или ненных записей, воспользуйтесь функцией ected_rows (листинг 19.3).

Представленный ниже сценарий создает таблицу и добавляет в нее записи. Далее происходит удаление части записей, обновление записей и, наконец, удаление всей таблицы. Обратите внимание на способ вставки записей. В массиве name содержатся девять имен, вставляемых в базу данных одной инструкцией INSERT. Сценарий со ставляет запрос, поочередно добавляя к нему элементы массива, отформатированные в соответствии с синтаксисом многострочной инструкции INSERT. Функция

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

<html>

<head>

</head>

<body>

Открытие постоянного соединения.

not connect to

Выбор базы данных

Изменение данных 405

not select

Создание таблицы.

$Query

"CREATE TABLE

"ID

NOT NULL

"Name "PRIMARY

not create

Вставка записей.

$Query "INSERT INTO testapi (Name) VALUES $name "Vicky", "Carl", "Ricky",

"Jeff", "Bob", "Tina", as $n)

$Query

$Query 0,

not insert

rows

Удаление записей.

$Query "DELETE FROM testapi WHERE ID

not delete

rows

Обновление записей.

$Query "UPDATE testapi SET Name

not update

rows

Удаление таблицы.

406 Глава 19. PHP

$Query "DROP TABLE

not drop

</body>

PERL

этой

Подготовка программы Извлечение данных Изменение данных

рудно представить UNIX систему без языка Perl. Это один из основных языков сценариев, завоевавший Internet. Он применяется при системном администри ровании, в научных расчетах и при создании Некоторые сценарии MySQL написаны именно на Perl. Сценарии Perl прекрасно работают в

Windows и в других операционных системах.

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

Подготовка программы

Поддержка MySQL в Perl реализована в интерфейсе DBI (Database Interface). Этот интерфейс определяет унифицированные методы доступа ко многим источникам дан ных, включая реляционные СУБД. Помимо модуля DBI необходим драйвер DBD (Database Driver) для конкретной СУБД. В случае MySQL и драйвер называется Соответствующие файлы можно загрузить на MySQL или из хивов (Comprehensive Perl Archive Network) адресу Посетите также посвященный интерфейсу DBI

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

perl

make

make test make install

410 Глава 20. Perl

После инсталляции модуля DBIи драйвера MySQL подключение к серверу ствляется с помощью метода: (листинг 20.1). Он возвращает дескриптор базы данных. Первый аргумент метода определяет источник данных. Компоненты этойстроки разделяютсядвоеточиями. Первый компонент гда равен Второй компонент идентифицирует драйвер, в данном случае Третий компонент — это имябазы данных. Дополнительно можно указать рес узла и порт. Остальные два аргумента метода connect задают имя пользователя и порт. По окончании сеанса необходимо вызвать метод disconnect

Подключение модуля use DBI;

I Подключение к базе данных. $dbh =

Извлечение данных

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

Рассмотрим пример, показанный влистинге 20.2. Этот сценарий извлекает записи из таблицы user и отображает их на экране. Обратите внимание на то, что сценарий пытается подключиться к серверу от имени пользователя root с явно неправильным паролем. Если будете экспериментировать со сценарием, подставьте корректные зна ченияименипользователяипароля.

Подключение модуля use DBI;

§ Подключение к базе данных. my $dbh =

tt Подготовка запроса.

 

my $query

"SELECT User, Host FROM user ORDER BY 1,2";

my $sth

 

 

or die

prepare $query:

$dbh >errstr

Изменение данных 411

Выполнение запроса.

or die execute $query: $dbh >errstr

i Извлечение записей. my

$sth >fetchrow_array)

my for $i

print $row[$i]

i Удаление инструкции.

tt

В этом примере ведется тщательный контроль ошибок. Многие в случае ошибки возвращают нуль. Ветвь or die интерпретируется только тогда, когда первая часть конструкции равна нулю. Обратите внимание на сообщение об ошибке, в котором указывается, какой запрос потерпел неудачу, и приводится сообщение, по лученное от драйвера.

Метод возвращает массив значений столбцов, индексация торых начинается с нуля. Данный сценарий достаточно универсален и позволяет об рабатывать результаты произвольной инструкции SELECT. He делается никаких

предположений о

сколько столбцов имеется в таблице результатов запроса. Это

значение определяется с помощью свойства NUM_OF_FIELDS объекта инструкции.

Метод etchrow_array

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

достигнут конец таблицы.

 

В конце сценария вызывается метод

который освобождает память, за

нимаемую инструкцией.

 

Изменение данных

Если требуется выполнить инструкцию, которая не возвращает набор записей (например, CREATE STATEMENT), воспользуйтесь методом do объекта базы дан ных. Этот метод возвращает число измененных записей. Для запросов, которые вы полнились успешно, но не меняли никаких записей, возвращается специальное зна чение

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