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

райвер |
позволяет |
подключаться к серверу MySQL по протоколу |
ODBC (Open Database |
Это особенноудобно пользователям Win |
dows, поскольку для многих приложений Windows интерфейс ODBC — единст венное средство взаимодействия с базами данных. В UNIX этот интерфейс использу ется только для переноса приложений Windows. Помимо драйвера MyODBC в UNIX необходим менеджер ODBC, лицензия на который стоит немало.
Технология ASP (Active Server как и ODBC, тоже была разработана компа нией Microsoft. Она применяется сервером IIS (Internet Information Server) компании Microsoft для обслуживания Web приложений. Сценарии ASP представляют собой HTML файлы со специальными тэгами, которые интерпретируются сервером как ис ходный код. Несмотря на то что технология ASP поддерживает несколько языков сценариев, большинство разработчиков придерживаются языка VBScript.
В этой главе рассказывается о написании программы на языке VBScript, которая подключается к серверу MySQL по протоколу ODBC. Предполагается, что читатели имеют опыт написания сценариев ASP и работали с ODBC, по крайней мере на при кладном уровне.
Подготовка программы
Прежде чем начинать работать с базой данных, необходимо инсталлировать драй вер MyODBC. Это отдельный файл, доступный на Web узле MySQL. Загрузите инстал ляционную программу для своей платформы и установите драйвер. Можно создать системный источник данных (Data Source Name, DSN) или включить всю информа цию о соединении непосредственно в сценарий.
Для запуска сценариев ASP необходим сервер IIS либо личный Web сервер (Personal Web Server, PWS). Для пользователей Windows они доступны бесплатно. Сервер IIS работает в Windows NT/2000, a PWS в Windows 98/98/ME. Обасервера являются частью вспомогательных пакетов. Я работал с сервером PWS в Windows 98. Этот сервер есть на инсталляционных Windows 98, но в случае
ходимости его можно загрузить с
компании Microsoft. Для установки сервера

394 Глава VBScript и ODBC
достаточно запустить инсталляционную программу и указать корневой каталог созда ваемого
В листинге 18.1 показан минимальный сценарий, который подключается к серверу MySQL на локальномкомпьютере с использованием объектов ADO Data
<%@ Option Explicit
<head>
</head>
<body>
dim connection
Подключение к серверу.
set
&
set connection=nothing
</body>
</html>
Метод open |
принимает в качестве аргумента строку подключения к ODBC. |
|
В данном случае в строке подключения указан не DSN, а непосредственно драйвер. |
||
драйвер MySQL — это библиотечный файл |
но имя драйвера — |
|
"MySQL", как указано в панели управления ODBC. |
|
В строке подключения могут содержаться различные параметры, разделяемые кой с запятой. Параметры, передаваемые драйверу MySQL, перечислены в табл. 18.1.
Параметр |
Описание |
|
DATABASE |
Имя стандартной базы данных |
|
OPTION |
Различные опции (табл. 18.2) |
|
PASSWORD, PWD |
Пароль для подключения |
|
PORT |
Порт для подключения (по умолчанию — 3306) |
|
SERVER |
Доменное имя или IP адрес сервера |
— |
SOCKET |
Файл или именованного канала |
|
STMT |
Запрос, выполняемый после установления соединения |
|
USER, UID |
Имя пользователя |
|

Подготовка программы 395
Параметр OPTION представляет собой битовое поле, в котором могут быть заданы 18 опций (табл. 18.2). При создании источника данных ODBC на панели управления опции отображаются в виде флажков. Чтобы активизировать несколько опций, просто сложите их значения.
Значение опции |
Описание |
1 |
Всегда сообщать формальную, а не фактическую |
|
столбца |
2 |
Сообщать о количестве просмотренных, а не модифицированных |
|
записей |
4 |
Вести журнал отладки |
8 |
Не ограничивать количество записей в таблице результатов за |
|
проса |
16 |
Отменить выдачу каких бы то ни было приглашений |
32 |
Имитировать ODBC 1.0 |
64 |
Игнорировать имена баз данных в табличных ссылках вида |
|
Использовать наборы записей менеджера ODBC |
256 |
Не задавать идентификатор регионального стандарта |
512 |
Дополнять поля типа CHAR до полной размерности столбца |
1024 |
Возвращать полные имена столбцов в функции |
2048 |
Сжимать данные, передаваемые между клиентом и сервером |
4096 |
Разрешить пробелы между именем функции и открывающей |
|
скобкой |
8192 |
Использоватьименованные каналы |
16384 |
Приводить столбцы типа BIGINT к типу INT |
32768 |
Определять принадлежность таблиц по имени пользователя, а не |
|
базы данных |
65536 |
Учитывать опции, заданные в конфигурационных файлах |
|
Проверять наличие ошибок |

dim connection |
Объект подключения к базе данных |
dim query |
Запрос |
dim |
Результаты запроса |
dim |
Число столбцов в таблице результатов |
dim |
Счетчик цикла |

Изменение данных 397
Выборка всех
do while not
&
Отображение значений столбцов. for
0 to
&
&
next
& vbcr)
Переход к следующей
loop
Удаление результатов запроса.
set rs=nothing
Закрытие
set connection=nothing
& vbcr)
</body>
Обратите внимание на то, что в сценарии не делаетсяявных предположений о личестве столбцов в таблице результатов запроса. Сценарий опрашивает свойство count и создает HTML таблицу имен столбцов соответствующего размера. Имя столбца извлекается из свойства name.
Изменение данных
Запросы на вставку или обновление данных не возвращают наборы записей, но иногда требуется узнать, сколько записей было добавлено или изменено. Программа, представленная в листинге 18.3, ис пользует объект для лучшего контроля соединения. Программа создает таблицу и добавляет в нее записи. Далее происходит удаление части записей, обновление записей и, наконец, удаление всей таблицы.
Option Explicit
<head>
</head>
<body>
dim connection |
Объект подключения к базе данных |

398 Глава |
VBScript и ODBC |
||
dim |
|
Объект взаимодействия с базой данных |
|
dim query |
Запрос |
|
|
dim names |
Массив имен для инструкции INSERT |
||
dim |
|
Счетчикцикла |
|
dim rows |
Число измененных записей |
||
Подключение к серверу. |
|
||
set |
|
|
|
set |
|
|
|
set |
|
|
|
Создание таблицы. |
|
||
query |
"CREATE TABLE |
|
|
query |
query & "ID |
NOT NULL AUTO_INCREMENT, |
|
query |
query & "Name |
|
|
query |
query & "PRIMARY |
|
|
query |
query & |
|
|
Инструкция для вставки записей. |
|||
query |
"INSERT INTO testapi (Name) VALUES |
Создание входного параметра типа
64,
Вставка записей. |
|
|
|
names |
"Vicky", "Carl", |
"Ricky", |
|
"Jeff", |
"Bob", "Tina", "Joey") |
||
for each n in names |
|
|
|
rows |
& row |
& |
|
next |
|||
|
|
Очистка.
0
Удаление записей.
FROM testapi WHERE ID
4"
rows
& rows
& vbcr)
Обновление записей.
testapi SET Name
rows
&
rows
& vbcr)
Удаление таблицы.
TABLE testapi"

Изменение данных 399
Закрытие
set
set connection=nothing
&
</body>
Сравните использование объекта command в листинге 18.3 спримером, показан ным в листинге 18.2. Сразу после создания объект связывается с активным соедине нием. Текст запроса не передается непосредственно методу execute а заносится в свойство
после чего метод execute
вызывается без аргументов.
Обратите внимание на способ вставки записей. Массив names содержит имена, вставляемые в таблицу Чтобы не нужно было создавать отдельный запрос для каждой инструкции INSERT, объекту command передается параметризованный запрос. Вместо значений, подставляемых позднее, указан метасимвол
В других СУБД поддерживаются предварительно скомпилированные запросы, которые анали зируются один раз, а потом многократно выполняются. В MySQL вместо этого при меняются запросы с параметрами.
Перед выполнением запроса необходимо определить значение каждого параметра. В листинге 18.3 единственный параметр инструкции INSERT имеет тип VARCHAR Метод
создает объект, содержащий описание параметра, а метод append
добавляет этот объект в коллекцию параметров (par ameters) объекта command. Метод createparameter
принимает пять аргументов. Первый из них идентифицирует параметр запроса. Второй аргумент задает его SQL тип. Это должна быть целочисленная константа. В
число 200 соответствует типу VARCHAR. Описание соответствующих констант можно найти в библиотеке MSDN компании Mi crosoft. Третий аргумент определяет, является ли параметр входным, выходным или двойственным. Подобно предыдущему аргументу, это целочисленная константа, опи санная в документации по VBScript. Последние два аргумента задают длину параметра и его значение. В каждой операции вставки значение параметра будет разным, поэтому первоначально оно определено как пустая строка.
Прежде чем переходить к циклу вставки значений, нужно предупредить объект command о том, что он будет работать с подготовленной инструкцией. Тем самым сервер будет уведомлен о наличии у инструкции параметров. По окончании цикла вставки данный режим отключается.
В цикле for параметру инструкции INSERT по очереди присваиваются значения, хранящиеся в массиве names. Метод execute помещает в переменную rows число записей, вставленных в таблицу. Последовательная вставка записей — не самое эф фективное решение, учитывая, что в MySQL есть разновидность инструкции INSERT, позволяющая обрабатывать группу записей (см. главу 13, "ИнструкцииSQL"). Данный метод удобен тогда, когда требуется выполнять произвольные пользовательские за просы. Кроме того, он позволяет избежать проблем с управляющими символами.

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

это наиболее популярная СУБД среди программистов, работающих на языке
Обе эти системы извлекают преимущества из популярности друг друга. В частности, для MySQL выгодно растущее число сторонников
писать Web приложения на РНР, а для РНР выгодна высокая оперативность команды разработчиков MySQL. Монти ответственный за сопровождение MySQL, входит в группу разработчиков ядра РНР и является членом зала славы РНР
РНР — это серверный язык сценариев, предназначенный для встраивания кода в HTML файлы с помощью специальных тэгов. Он поддерживает работу с MySQL, оп ределяя собственные которые содержат вызовы функций биб лиотеки языка С (рассматривалась в главе 15, "Библиотека функций языка С"). Опи сание функций РНР можно найти на Web узле www.php.net.
Подготовка программы
В РНР имеются собственные средства поддержки MySQL. В двоичные дистрибу тивы входит модуль расширения MySQL, а в исходный дистрибутив включен каталог с исходными кодами, предназначенными для реализации интерфейса к этой СУБД. Ес ли пакет РНР компилируется из исходных текстов, то внешняя библиотека функций MySQL не нужна: она входит всостав пакета.
РНР хорошо взаимодействует не только с сервером Apache, но и с сервером IIS в Windows. В любом случае Web сервер должен быть настроен таким образом, чтобы файлы, имеющие расширение были ассоциированы с модулем РНР.
Подключиться к серверу MySQL из несложно. Достаточно вызвать функцию
или mysql_pconnect
с соответствующими аргумен тами. Обе функции возвращают идентификатор соединения, требуемый для боль