MySQL. Библиотека профессионала - Аткинсон Л
..pdf
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 с явно неправильным паролем. Если будете экспериментировать с этим сценарием, подставьте корректные значения имени пользователя и пароля.
Изменение данных 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
этой 
Подготовка программы Извлечение данных Изменение данных
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 содержатся

Открытие постоянного соединения.
not select
"SELECT User, Host FROM user ORDER BY 1,2";
Извлечение записей. while($row 
в случае ошибки возвращают FALSE. Внутри инструкций if отображается сообщение об ошибке, за которым следуют номер ошибки и ее описание, полученные от сервера

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

возвращает описание следующего столбца, поэтому она вызывается в цикле.
etch_row
возвращает массив значений столбцов, индексация которых начинается с нуля. Поскольку вданном примере записи отображаются цели ком (в цикле
нет необходимости адресовать отдельные столбцы.
но вызывать функцию
f
нет необходимости. Если требуется узнать число добавленных или
ненных записей, воспользуйтесь функцией 
ected_rows
(листинг 19.3).
вставляет обратную косую черту перед каждым символом, имеющим специальное назначение в SQL, например перед одинарной кавычкой. С помощью функции 
из текста запроса удаляется хвостовая запятая.
Некоторые сценарии MySQL написаны именно на Perl. Сценарии Perl прекрасно работают в
:mysql и методов DBI. Для получения дополнительной информации можно также воспользоваться команд
драйвер называется 
Соответствующие файлы можно загрузить на
MySQL или из
хивов
(Comprehensive Perl Archive Network)
адресу
Посетите также
посвященный интерфейсу DBI 
перед ком пиляцией исходного кода. В остальном все делается так же, как и в случае любой дру гой программы. Последовательность команд будет такой: