Учебно-методическое пособие по курсу &quot

реклама
Государственный университет – Высшая школа экономики
Факультет бизнес-информатики
Кафедра бизнес-аналитики
А.С. Акопов
Учебно-методическое пособие по курсу «Базы данных»
по теме
РАЗРАБОТКА WEB-ПРИЛОЖЕНИЙ
НА СТОРОНЕ СЕРВЕРА
Утверждено
Учебно-методическим советом факультета «Бизнес-информатика» ГУ-ВШЭ
в качестве учебного пособия для студентов 20.04.2010
Рецензенты:
к.т.н., доцент Ахметсафина Р. З.
к.т.н., доцент Перминов Г. И.
Москва – 2010
Оглавление
1. Введение ......................................................................................................................... 3
2. Программа курса .......................................................................................................... 6
Раздел 1. Основы языка программирования PHP........................................................ 6
1.1 Введение в PHP ..................................................................................................... 7
1.2 Установка интерпретатора PHP ........................................................................ 10
1.3 Полезные конструкции на PHP ......................................................................... 14
1.4 Управляющие структуры PHP .......................................................................... 16
1.5 Работа с файловой системой ............................................................................. 18
1.6 Базы данных и PHP............................................................................................. 18
Раздел 2. Основы технологии ASP.NET и ADO.NET ............................................... 25
2.1 Введение в ASP.NET .......................................................................................... 25
2.2 Установка программного обеспечения для ASP.NET .................................... 30
2.3 Полезные конструкции на ASP.NET ................................................................ 32
2.4 Управляющие структуры ASP.NET.................................................................. 34
2.5 Работа с файловой системой ............................................................................. 35
2.6 Базы данных и ASP.NET .................................................................................... 36
Раздел 3. Разработка приложений для WEB с использованием MySQL ................ 41
3.1 Введение в MySQL ............................................................................................. 41
3.2 Взаимодействие MySQL и PHP. ....................................................................... 43
3.3 Визуальные средства проектирования для MySQL. ....................................... 52
3. План семинарских занятий .................................................................................. 56
4. Контрольная работа и методические рекомендации к ее выполнению ...... 58
5. Вопросы итогового контроля ............................................................................... 60
6. Рекомендуемая литература .................................................................................. 62
2
1. Введение
В настоящее время количество приложений с использованием систем управления реляционными базами данных (СУБД) неуклонно растет. Особенно на этом
фоне выделяются разработки под Интернет.
Современные информационные системы, такие как динамические WEBсайты, используют СУБД для управления контентом (информационным наполнением) и обеспечения интерфейса взаимодействия с пользователями. Динамические
Web-сайты, как правило, основаны на шаблонных страницах (в частности, HTMLформата), в которые вставляется (когда пользователь запрашивает соответствующие страницы через WEB-браузер) постоянно меняющееся информационное
наполнение, извлекаемое из СУБД.
Отметим, что HTML (от англ. HyperText Markup Language — «язык разметки
гипертекста») — стандартный язык разметки документов во Всемирной паутине.
Большинство WEB-страниц создаются при помощи языка HTML (или XHTML).
Динамические WEB-сайты, как правило, создаются с использованием различных скриптовых языков программирования и технологий, среди которых,
наиболее распространенными являются:
 PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста») — скриптовый язык программирования общего назначения, интенсивно применяющийся для разработки WEB-приложений,
в том числе взаимодействующих с СУБД;
 ASP.NET — технология создания WEB-приложений и WEBсервисов от компании Microsoft. Она является составной частью
платформы Microsoft .NET. . Разработчики могут писать код для
ASP.NET, используя практически любые языки программирования, в
том числе, и входящие в комплект .NET Framework (C#, Visual
Basic.NET, и JScript .NET). ASP.NET имеет преимущество в скорости
по сравнению со скриптовыми технологиями, так как при первом об3
ращении код компилируется и помещается в специальный кэш, и
впоследствии только исполняется, не требуя затрат времени на парсинг, оптимизацию, и т. д.
Существуют и другие языки программирования и технологии создания динамических WEB-приложений, взаимодействующих с СУБД, например, язык программирования Java Server Pages (JSP), технология Java 2 Enterprise Edition и JDBC,
технология создания расширений ISAPI и приложений CGI на языке программирования C++ и др. Такие технологии имеют определенные достоинства и недостатки,
связанные с быстродействием, функциональными возможностями, и др. Вместе с
тем, в процессе обучения программированию приложений баз данных для WEB целесообразно ориентироваться на наиболее популярные инструменты, такие как
PHP, и ASP.NET (VBScript .NET). При этом следует отметить, что скриптовый язык
программирования PHP является более простым в использовании и ориентирован
на проектирование малых и средних динамических WEB-сайтов (таких как, форумы, блоги, интернет-магазины и др.), а технология ASP.NET предназначена для
проектирования больших информационных систем (например, Интернет-порталов)
и предполагает активное использование методов объектно-ориентированного программирования (ООП) и визуальных средств разработки, в частности, Microsoft
Visual Studio. Также отметим, что технология PHP наилучшим образом адаптирована для работы с СУБД MySQL, а ASP.NET для взаимодействия с СУБД Microsoft
SQL Server (посредством специальной технологии ADO.NET) .
Основной целью изучения темы «Разработка WEB-приложений на стороне
сервера», изучаемой в рамках курса «Базы данных», является обучение студентов
методологии проектирования приложений взаимодействующих с СУБД для WEB.
Основные задачи темы: расширение и углубление теоретических знаний в области
разработки баз данных; овладение специальными языками программирования,
обеспечивающими возможность разработки приложений баз данных для WEB;
изучение специфики технической реализации СУБД для WEB, в частности, на при-
4
мере MySQL; изучение наиболее типичных примеров создания динамических
WEB-страниц, взаимодействующих с СУБД.
Освоение темы предполагает знание основ технологий реляционных баз данных, программирования на языках: Си, Visual Basic и SQL, а также теоретических
основ веб-дизайна (HTML, CSS и др.).
5
2. Программа курса
Раздел 1. Основы языка программирования PHP
Как было отмечено ранее, PHP (англ. PHP: Hypertext Preprocessor — «PHP:
препроцессор гипертекста») — скриптовый язык программирования общего назначения, интенсивно применяющийся для разработки WEB-приложений, в том числе
взаимодействующих с СУБД.
В отличие, в частности, от сценариев JavaScript и VBScript, выполняемых на
стороне «клиента», PHP сценарии выполняются на стороне «сервера» и позволяют
работать с различными СУБД, например MS SQL Server, Oracle, серверной файловой системой, почтовыми сервисами и др.
Обратите внимание. Для работы с PHP (ASP, JSP и др.) (в отличие от JavaScript) нужен установленный и специально настроенный WEB-сервер, например, Internet Information Server (IIS). К примеру, если у Вас установлена операционная система Windows XP/Vista и т.п., то Вы можете скачать дистрибутив PHP c сайта:
www.php.net
(например,
для
пятой
версии:
http://ru.php.net/get/php-5.2.12-
Win32.zip/from/a/mirror).
Обратите внимание. PHP является свободно распространяемым продуктом,
класса Open Source (открытого исходного кода).
Отметим, что файл, использующий PHP-сценарии, должен, как правило,
иметь расширение «*.php».
6
1.1 Введение в PHP
Следующий код
<?php echo ("Hello, World!); ?>
Дает
Hello, World!
Имена переменных обозначаются знаком $. То же самое "Hello, World!"
можно получить следующим образом:
<?php
$message = "Hello, World!";
echo($message);
?>
Конкатенация (присоединение) строк осуществляется с помощью . (точки);
обычные арифметические операции определяются так, как Вы того и ожидаете:
<?php
$greeting = "Hello ";
$num = 3 + 2;
$num++;
echo ("$greeting.$num.”people!“);
?>
даст Hello 6 people!
Обратите внимание. Синтаксис PHP очень похож на C.
7
Cтрока, заключенная в двойные кавычки, означает, что встречающиеся в этой
строке переменные будут заменены их значениями, в то время как если строка
заключена в одинарные кавычки, такая замена не производится. Так
<?php
$name = 'Susannah';
$greeting_1 = "Hello, $name!";
$greeting_2 = 'Hello, $name!';
echo "$greeting_1\n";
echo "$greeting_2\n";
?>
даст
Hello, Susannah!
Hello, $name!
Обратите внимание на то, что \n в строке означает переход к новой строке,
совсем как в Perl или в C. Однако это работает только в тех строках, которые взяты
в двойные кавычки.
PHP обеспечивает доступ к переменным окружения как к регулярным
переменным. Например, при нажатии на кнопку формы инициируется передача
данных формы методом GET или POST
Такой сценарий:
<?php
$action = $_REQUEST[‘sbt']; // Можно также использовать $_POST[‘sbt'];
echo($action);
?>
Даст результат:
Вход
8
после нажатия на кнопку «Вход»
<Form name=“frm1” METHOD=POST>
<INPUT TYPE = "Submit" NAME="sbt" VALUE="Вход">
</Form>
Очевидное достоинство PHP в том, что Вам не надо заботиться о получении,
раскодировании и любой другой обработке данных из формы, как например при
написании CGI программы на языке C/C++. За нас все делает PHP. Очень легко и
красиво он автоматически заполняет несколько встроенных массивов:
$_SERVER ($HTTP_SERVER_VARS) - для серверных переменных;
$_ENV ($HTTP_ENV_VARS) - для переменных среды, в которой работает PHP;
$_COOKIE ($HTTP_COOKIE_VARS) - для переменных передающихся посредством
cookies;
$_GET ($HTTP_GET_VARS) - для параметров формы, переданных посредством
метода GET;
$_POST ($HTTP_POST_VARS) - для параметров формы, переданных методом
POST;
$_FILES ($HTTP_POST_FILES) - для закачиваемых посредством метода POST
файлов;
$_REQUEST - массив содержащий внутри себя массивы $_GET, $_POST и
$_COOKIE;
$_SESSION ($HTTP_SESSION_VARS) - для хранения параметров сессии.
Используя $_REQUEST, Вы получаете доступ к данным формы. Можете
сохранить эти данные в Базе Данных и т.д.
9
1.2 Установка интерпретатора PHP
Шаг 1. Распакуйте дистрибутив в папку C:\PHP
Шаг 2. Настройте Internet Information Server на своем локальном компьютере, так
чтобы выполнялась обработка файлов с расширением *.php. Для этого нужно зайти
в Панель управления Windows, далее – Администрирование, далее - Диспетчер
служб IIS. Затем нужно добавить обработку php-сценариев фильтром ISAPI для
всех узлов по умолчанию с помощью вкладки «Фильтры ISAPI» (рис. 1)
Рис. 1. Добавление фильтра ISAPI для обработки PHP-сценариев.
Отметим, что Internet Server Application Programming Interface (ISAPI) — это
API (Application Programming Interface - набор готовых классов, функций, структур
и констант, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах.) для Internet Information Services, коллекции сетевых служб Microsoft Windows. Соответственно, фильтры ISAPI представляют собой динамические библиотеки DLL, напрямую взаимодействующие с
IIS.
10
Далее, нужно добавить «Сопоставление сценария PHP с исполняемым файлом ISAPI-фильтра (php5isapi.dll). Это можно сделать в разделе «Сопоставление
обработчиков» системы администрирования IIS (рис. 2).
Рис. 2. Настройка «Сопоставления обработчиков» IIS для PHP.
11
Обратите внимание. Для различных версий ОС Windows, интерфейс Диспетчера
служб IIS также будет различным. К примеру, в для Windows XP добавление
фильтра ISAPI для PHP имеет вид рис. 3.
Рис. 3. Добавление фильтра ISAPI для обработки PHP-сценариев в для IIS 6.0
ОС Windows XP.
Шаг 3. Скопируйте php5ts.dll из дистрибутива в папку C:\Windows\system32
Шаг 4. Убедитесь, что PHP работает под управлением Вашего IIS. Для этого создайте файл test.php в папке IIS (C:\Inetpub\wwwroot) c таким кодом:
<?php
phpinfo();
?>
12
Должен быть получен вот такой
результат
Рис. 4. Оценка корректности установки и конфигурирования PHP.
Обратите внимание на параметр Loaded Configuration File. К примеру, в нашем
случае он имеет следующее значение: «C:\Program Files\PHP\php.ini». Это означает,
что кофигурационный файл, с помощью которого Вы можете переопределять
параметры PHP модуля, находится в папке «C:\Program Files\PHP), и загружен
успешно.
Шаг5. Сконфигурируйте файл php.ini под Ваши задачи.
13
Например, если Вы планируете работать с графической библиотекой PHP
нужно включить extensions
(php_gd2.dll)
Как конфигурировать php.ini см. руководство по PHP [1].
Рис. 5. Конфигурирование PHP под собственные задачи.
1.3 Полезные конструкции на PHP
include("login.php"); //Вставка файла login.php в текущий файл
<?php if ($action == “Вход”): ?>
//Здесь произвольный HTML код
//Данный блок кода будет выполнятся, только если переменная $action примет
значение «Вход», т.е. если Пользователь нажмет на кнопку «Вход
……………………………………
<?php endif; ?>
//Функция isset позволяет проверить установлено ли значение переменной $action
if(!isset($action))
$action="";
14
Простейший способ установить cookie на PHP таков:
setcookie('name', 'bret');
Затем, для каждой последующей страницы на Вашем сайте, просматриваемой
в течение данной сессии (пока пользователь не покинет сайт) переменная $name
будет иметь значение 'bret' и его можно легко прочитать средствами PHP. Этот тип
cookie известен как cookie-сессия, поскольку значение сохраняется в течение
пользовательской сессии.
С помощью cookie можно создать, в частности, «Корзину покупок» для
Интернет-магазина или запомнить «профиль» пользователя.
Если Вы хотите,
чтобы значение cookie запоминалось браузером после того, как пользователь
закончит сессию, Вы должны передать функции setcookie() третий параметр - дату
истечения срока действия cookie. Поскольку PHP сформировался в основном в
среде Unix, Вы должны представить время истечения срока действия cookie как
число секунд, прошедших с 1 января 1970 г.
Например, если Вы хотите, чтобы срок действия cookie истек 1 января 2000
г., Вы записываете:
<?php
$y2k = mktime(0,0,0,1,1,2000);
setcookie('name', 'bret', $y2k); ?>
Удаление cookie
<?php setcookie('name'); ?>
Обратите внимание. В силу того, как организована обработка cookies в
протоколе HTTP, необходимо установить значения всех cookie до вывода какоголибо текста. Если сделать наоборот, PHP выдаст Вам предупреждение и значение
cookie не будет послано. Вот так правильно:
15
<?php
setcookie('name', 'jeff');
echo "Hello Everyone!";
?>
Создать массив можно также путем вызова функции array():
$fruit = array();
$favorites = array();
или так
$fruit = array('banana','papaya'); //Создается массив из 2-х элементов
'banana‘ и 'papaya'
Индексы массивов (как обычных, так и ассоциативных) задаются в квадратных
скобках ([ и ]):
$fruit[0] = 'banana';
$fruit[1] = 'papaya';
$favorites['animal'] = 'turtle';
$favorites['monster'] = 'cookie';
1.4 Управляющие структуры PHP
Вы можете использовать операторы цикла, такие как for и while. В результате
выполнения оператора:
for ($i = 4; $i < 8; $i++) {
print "I have eaten $i bagels today.\n";
}
Получим:
I have eaten 4 bagels today.
I have eaten 5 bagels today.
16
I have eaten 6 bagels today.
I have eaten 7 bagels today.
Тот же самый результат даст
$i = 4;
while ($i < 8) {
print "I have eaten $i bagels today.\n";
$i++;
}
Вы можете также использовать конструкции с if и elseif:
if ($user_count > 200) {
print "Сайт сейчас перегружен!";
}
elseif ($user_count > 100) {
print "Сайт активно используется!";
else {
print "Сайт свободен - подключились только $user_count пользователей.";
}
Вы можете использовать конструкции с switch, do...while.
switch($kv1) // Оцениваем значение переменной $kv1
{
case 1:
{ $ms1="01";
break;}
case 2:
{ $ms1="04";
break;}
}
17
1.5 Работа с файловой системой
Пример обработки файла CSV (с данными разделямыми точкой с запятой).
$fp = file("baza/data.txt"); //Открываем файл data.txt
$pat =";"; // Определяем разделитель данных в файле “;”
for($i = 0; $i < count($fp); $i++){
$arr = split($pat, $fp[$i]); // Формируем массив значений $arr из данных файла
}
Различные функции по работе с файлами:
fread($f, $numberbytes) - читает из файла $f $numberbytes символов и возвращает
строку этих символов.
fwrite($f, $st); - записывает в файл $f содержимое строки $st. .
fgets($f, $dlina); - считывает из файла одну строку, заканчивающеюся символом
новой строки \n.
fputs($f, $st); - аналогична функции fwrite().
Конструкция or die().
Проанализировать результат функции fopen() и если он не равен false, вывести работу сценария позволяет конструкция or die ($err_message). Синтаксис данной
конструкции следующий:
($f=fopen("/homa/user/file.txt","r")) or die ("error");
1.6 Базы данных и PHP
Пример 1. Создание соединения и выбор СУБД для MySQL
<?PHP
/* Некоторые переменные */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
18
$dbName = "products";
/* создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать
соединение ");
mysql_select_db("$dbName");
/* Осуществляем определенные операции с СУБД */
/* Закрыть соединение */
MYSQL_CLOSE();
?>
Обратите внимание. Для работы с MySQL из PHP нет необходимости в каких
либо дополнительных модулях. MySQL «родная» СУБД для PHP.
Пример 2. Создание соединения и выбор базы данных для MS SQL Server.
<?PHP
/* Некоторые переменные */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
/* создать соединение */
$link = MSSQL_CONNECT($hostname,$username,$password) or die ("Не могу
создать соединение ");
Mssql_select_db ("$dbName“, $link);
/* Осуществляем определенные операции с СУБД */
/* Закрыть соединение */
MSSQL_CLOSE();
?>
19
Обратите внимание. Для работы с MS SQL Server из PHP (и другими СУБД кроме
MySQL), необходимо подключить специальный модуль, соответствующий данной
СУБД. Данная операция осуществляется в файле php.ini, посредством удаления
знака «;» в соответсвующей строке файла, т.е.
Фрагмент файла php.ini:
[PHP_MSSQL] (extension=php_mssql.dll)
Обратите внимание, что если Вы используется в качестве сервера хорошо
известную платформу MS SQL Server Express Edition, то строка соединения с базой
данных «TEST» (в режиме аутоинтификации SQL Server, т.е. по логину «sa») будет
иметь следующий вид:
<?php
$link = mssql_connect (".\SQLEXPRESS","sa","") or die ("Could not connect");
Mssql_select_db("TEST", $link);
?>
Обратите внимание на имя сервера СУБД ".\SQLEXPRESS".
Пример 3. Создание новой таблицы в MS SQL с помощью PHP
<?PHP
$link = mssql_connect (“127.0.0.1”,"sa","") or die ("Could not connect");
Mssql_select_db("GRAF", $link);
$strSQL = "CREATE TABLE scenar( // Таблица со значением результатов прогноза
data1
datetime,
nomer_sc
INTEGER,
E decimal (20,2),
O decimal (20,2),
GT decimal (20,2),
TR decimal (20,2),
20
P decimal (20,2),
Y decimal (20,2),
M decimal (20,2),
N decimal (20,2),
X decimal (20,2),
CO decimal (20,2)
)";
$roma10 = mssql_query($strSQL);
if($roma10 ==1)
echo("Таблица scenar создана успешно<BR>");
?>
Пример 4. Заполнение таблицы в MS SQL с помощью PHP данными из файла
<?PHP
$link = mssql_connect (“127.0.0.1”,"sa","") or die ("Could not connect");
Mssql_select_db("GRAF", $link);
$fp = file("baza/data2.txt"); // В файле data2.txt находятся исходные данные
$strSQL = "delete from scenar";
$roma = mssql_query($strSQL); // Удаляем предыдущие данные
for($i = 0; $i < count($fp); $i++){
$pat =";";
$arr = split($pat, $fp[$i]); // Разбиваем текущую строку файла на массив значений по
“;”
$strSQL ="SET DATEFORMAT dmy"; //День-месяц-год
$roma = mssql_query($strSQL);
$strSQL = "insert into scenar(data1, nomer_sc, E, O, GT, TR, P, Y, M, N, X, CO)
21
values('$arr[0]',$arr[1] , $arr[2], $arr[3], $arr[4],$arr[5] , $arr[6], $arr[7],
$arr[8],$arr[9] , $arr[10], $arr[11])";
$roma = mssql_query($strSQL); //Выполняем команду вставки записей
}
?>
Фрагмент файла data2.txt
01.07.2001;1;29.33;25.89;175.98;82.124;102.2;2193.884;12.7;1088.143;28.3;926.828;
01.07.2001;2;29.33;25.89;205.31;46.928;102.2;2229.08;12.6;1132.138;26.6;941.493;
01.07.2001;3;29.33;25.89;190.645;64.526;102.2;2193.45;12.6;1097.1;27.5;927.7;
01.07.2001;4;29.33;25.89;284.501;87.99;102.2;2190.951;12.7;1173.2;28.6;941.493;
01.10.2001;1;31;15;305;105;102.83;2543.18;13.45;1378.74;29.44;1091.46
Обратите внимание. Если файл с данными большой (например, имеет тысячи
записей и более), то лучше использовать массовую загрузку данных в MS SQL
Server командой BULK INSERT. Это будет намного быстрее.
Пример 5. Выполнение запроса к базе по заданному критерию
<?PHP
$link = mssql_connect (“127.0.0.1”,"sa","") or die ("Could not connect");
Mssql_select_db("GRAF", $link);
$strSQL1 = "select * from scenar where nomer_sc=1 AND data1 >= ‘2008-01-01’";
$zapr1=mssql_query($strSQL1);
$idx=1;
while($r1 = mssql_fetch_array($zapr1))
{
$E_1[$idx] = $r1["E"]; // Считываем значения переменных из Базы в массивы
переменных
$O_1[$idx] = $r1["O"];
22
$GT_1[$idx] = $r1["GT"];
$TR_1[$idx] = $r1["TR"];
$P_1[$idx] = $r1["P"];
$Y_1[$idx] = $r1["Y"];
$M_1[$idx] = $r1["M"];
$N_1[$idx] = $r1["N"];
$X_1[$idx] = $r1["X"];
$CO_1[$idx] = $r1["CO"];
$idx++;
}
// Осуществляем различные манипуляции с массивами переменных $E_1[$idx] и др.
?>
Отметим, что PHP поддерживает ряд функций спефифичных для MySQL, в
частности, следующие:
mysql_affected_rows -- Возвращает число затронутых прошлой операцией рядов.
mysql_change_user -- Изменяет пользователя для указанного соединения.
mysql_client_encoding -- Возвращает кодировку соединения
mysql_close -- Закрывает соединение с сервером MySQL.
mysql_connect -- Открывает соединение с сервером MySQL.
mysql_create_db -- Создаёт базу данных MySQL.
mysql_data_seek -- Перемещает внутренний указатель в результате запроса.
mysql_db_name -- Возвращает название базы данных.
mysql_db_query -- Переключается к указанной базе данных и посылает запрос.
mysql_drop_db -- Уничтожает базу данных MySQL.
mysql_errno -- Возвращает численный код ошибки выполнения последней операции с MySQL.
mysql_error -- Возвращает строку ошибки последней операции с MySQL.
mysql_escape_string -- Экранирует SQL спецсимволы для mysql_query.
mysql_fetch_array -- Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба.
mysql_fetch_assoc -- Обрабатывает ряд результата запроса и возвращает ассоциативный массив.
mysql_fetch_field -- Возвращает информацию о колонке из результата запроса в виде объекта.
mysql_fetch_lengths -- Возвращает длину каждого поля в результате.
mysql_fetch_object -- Обрабатывает ряд результата запроса и возвращает объект.
mysql_fetch_row -- Обрабатывает ряд результата запроса и возвращает неассоциативный массив.
23
mysql_field_flags -- Возвращает флаги указанного поля результата запроса.
mysql_field_len -- Возвращает длину указанного поля.
mysql_field_name -- Возвращает название указанной колонки результата запроса.
mysql_field_seek -- Устанавливает внутренний указатель поля на переданное смещение.
mysql_field_table -- Возвращает название таблицы, которой принадлежит указанное поле.
mysql_field_type -- Возвращает тип указанного поля результата запроса.
mysql_free_result -- Освобождает память от результата запроса
mysql_get_client_info -- Возвращает данные о MySQL-клиенте
mysql_get_host_info -- Возвращает информацию о соединении с MySQL
mysql_get_proto_info -- Возвращает информацию о протоколе MySQL
mysql_get_server_info -- Возвращает информацию о сервере MySQL
mysql_info -- Возвращает информацию о последнем запросе
mysql_insert_id -- Возвращает ID, сгенерированный при последнем INSERT-запросе.
mysql_list_dbs -- Возвращает список баз данных, доступных на сервере.
mysql_list_fields -- Возвращает список колонок таблицы.
mysql_list_processes -- Возвращает список процессов MySQL.
mysql_list_tables -- Возвращает список таблиц базы данных MySQL.
mysql_num_fields -- Возвращает количество полей результата запроса.
mysql_num_rows -- Возвращает количество рядов результата запроса.
mysql_pconnect -- Устанавливает постоянное соединение с сервером MySQL.
mysql_ping -- Проверяет соединение с сервером и пересоединяется при необходимости.
mysql_query -- Посылает запрос MySQL.
mysql_real_escape_string -- Экранирует специальные символы в строках для использования в выражениях SQL.
mysql_result -- Возвращает данные результата запроса.
mysql_select_db -- Выбирает базу данных MySQL.
mysql_stat -- Возвращает текущий статус сервера.
mysql_tablename -- Возвращает имя таблицы, содержащей указанное поле.
mysql_thread_id -- Возвращает ID текущего потока.
mysql_unbuffered_query -- Посылает MySQL SQL-запрос без авто-обработки результата и её буферизации.
Отметим, что для PHP существуют программы “билдеры” для ускорения
процесса разработки WEB-страниц, взаимодействующих с СУБД, например, PHP
Report Maker.
24
Раздел 2. Основы технологии ASP.NET и ADO.NET
2.1 Введение в ASP.NET
ASP.NET — технология создания WEB-приложений и WEB-сервисов от
компании Microsoft. Она является составной частью платформы Microsoft .NET и
развитием более старой технологии Microsoft ASP. На данный момент последней
версией этой технологии является ASP.NET 4.0b.
ASP.NET внешне во многом сохраняет схожесть с более старой технологией ASP,
что позволяет разработчикам относительно легко перейти на ASP.NET. В то же
время внутреннее устройство ASP.NET существенно отличается от ASP, поскольку
она основана на платформе .NET и, следовательно, использует все новые
возможности, предоставляемые этой платформой.
Хотя ASP.NET берёт своё название от старой технологии Microsoft ASP, она
значительно от неё отличается. Microsoft полностью перестроила ASP.NET,
основываясь на Common Language Runtime (CLR), который является основой всех
приложений Microsoft .NET. Разработчики могут писать код для ASP.NET,
используя практически любые языки программирования, в том числе, и входящие в
комплект .NET Framework (C#, Visual Basic.NET, и JScript .NET). ASP.NET имеет
преимущество в скорости по сравнению со скриптовыми технологиями, так как при
первом обращении код компилируется и помещается в специальный кэш, и
впоследствии только исполняется, не требуя затрат времени на парсинг,
оптимизацию, и т. д.
Основа всего в Web-приложении – это страница. Пользователь, пользуясь
браузером, перемещается между страницами, периодически возвращаясь к уже
просмотренным ранее страницам, вводя какие-то данные в HTML формы и получая
некоторый результат. В ASP.NET страница чаще всего представляет собой Webформу, содержащую различные элементы управления, реагирующую на события,
создаваемые пользователем.
25
ASP.NET 1.x позволяет разделять код логики от кода представления, то есть
помещать код программной логики страницы в файл .cs или .vb, отдельно от кода
собственно страницы, размещаемом в .aspx файле. Эта технология называется CodeBehind. Таким образом, дизайн страницы может быть изменен не затрагивая кода
страницы, что позволяет разделить ответственность за внешний вид и работу
страницы между дизайнером и программистом. Для этого в .aspx файле можно
задать параметры директивы Page.
<%@ Page Language="c#" Src="User.aspx.cs" %>
Но для поддержки редактирования с помощью Microsoft Visual Studio .NET в
ASP.NET странице необходимо указать класс, соответствующей данной странице и
файл, в котором находится код этого класса. Для этого директива Page
преобразуется с использованием ключевых слов Codebenind и Inherits.
<%@ Page Language="c#" Codebehind="TheProject.User" Inherits="User.aspx.cs" %>
В ASP.NET 2.0 используется иной механизм разделения кода. В директиве Page при
этом необходимо использовать другие ключевые слова: CodeFile и Inherits.
<%@ Page Language="c#" CodeFile="TheProject.User" Inherits="User.aspx.cs" %>
В этом случае код класса программной логики страницы будет размещен в файле
указанном в атрибуте CodeFile. Надо отметить, что Visual Studio
использует
разделяемые классы:
public partial class Default : System.Web.UI.Page{
sender, EventArgs e)
{
protected void Page_Load(object
}}
Поэтому разработчик может поместить код класса в нескольких файлах, но
подобное рассредоточение кода делает приложение весьма громоздким и трудным в
поддержке и разработке.
26
Используемая в Visual Studio модель Code-Behind обладает несколькими
весьма существенными недостатками. Прежде всего, используя Visual Studio
разработчику необходимо компилировать проект перед публикацией, поскольку
ASP.NET компилирует страницы, только если указан атрибут Src, не используемый
Visual Studio. При этом, поскольку среда ASP.NET обнаруживает изменение даты
создания сборки, после каждой замены старой сборки в каталоге bin происходит
перезапуск домена приложения, что выливается во временную «заторможенность»
в работе приложения.
Visual Studio использует новые ключевые слова, поддерживаемые средой
выполнения ASP.NET 2.0, а среда выполнения, в свою очередь, использует новую
технику компиляции страниц. Это позволяет решить проблему замены сборки на
более новую.
Несмотря на это, Visual Studio по-прежнему позволяет отказаться от
разделения кода и поместить код программной логики в самом файле страницы, и
использовать теги <script runat="server"></script>. Более того, по умолчанию Visual
Studio создает именно страницы без разделения кода.
В ASP.NET 2.0 среда выполнения также анализирует директивы Page,
осуществляет поиск сборки соответствующей классу логики страницы, после чего
создается класс страницы. В отличие от ASP.NET 1.x, родительским классом для
класса
страницы
является
System.Web.UI.Page,
поскольку
создаваемый
динамический класс является собственно классом страницы (используются
разделяемые классы для класса страницы и класса программной логики), а не
потомком класса программной логики. Поэтому, если в ASP.NET 1.x класс Webформы мог называться также как и сама Web-форма.
<form id="frmDefault" runat="server"></form>…public class frmDefault :
System.Web.UI.Page{
В
ASP.NET
protected void Page_Load(object sender, EventArgs e)
2.0
это
недопустимо,
поскольку
элемент
{
}}
управления
System.Web.UI.Form является элементом класса. Основным преимуществом
ASP.NET является то, что в случае отсутствия сборки, необходимой для
27
выполнения страницы, происходит компиляция только файла программной логики
страницы, без перекомпиляции всей сборки.Поскольку существует динамическая
компиляция, то необходимо обеспечить возможность создавать код, общий для всех
страниц приложения. Для этой цели в ASP.NET 2.0 существуют специальные
директории,
являющиеся
дочерними
директориями
корневой
директории
приложения, одна из которых App_Code, служит для хранения файлов, содержащих
общий код для всех страниц. При выполнении динамической компиляции, код из
директории App_Code компилируется и становится доступным для всех страниц
Web-приложения. При этом Visual Studio поддерживает код, находящийся в
директории App_Code, поэтому работает подсветка синтаксиса и IntelliSense.
Обратите внимание. Технология ASP.NET базируется на технологии ASP (хотя и
меет существенные отличия от последней).
Основные возможности ASP.NET.
Далее опишем основные возможности ASP.NET на примере наиболее
популярного языка программирования, Visual Basic.NET, поддерживаемого .NET.
Для организации вывода существует объект Response. Вывод осуществляется
с помощью метода Write.
<% Response.Write("<h2>Hello, world!</h2>") %>
Так производится запись во внутренний буфер объекта Response. Когда
скрипт заканчивает работу, весь буфер выдается клиенту. Надо заметить, что клиент получает "чистый" HTML, таким образом, программы на ASP.NET не зависят
от клиентского ПО, что очень важно. Если внутри выводимой строки нужно использовать кавычку, кавычка удваивается. Другие методы и свойства Response позволяют управлять выводом. Так Response.Buffer регулирует, получает ли клиент
данные по мере из записи в Response, или все сразу по завершении исполнения
страницы. Метод Response.Redirect перенаправляет браузер на другую страницу.
Чтобы им пользоваться, нельзя до него на странице использовать Response.Write.
28
Программа на ASP.NET не может явно спросить пользователя о чем-то. Она
получает данные из других страниц, либо через URL. Передаваемые параметры помещаются во входной поток и доступны через объект Request. Чтобы передать переменную var в программу test.asp, надо написать:
test.asp?var=abc
Чтобы из программы получить значение этой переменной, надо написать:
var = Request("var")
Несколько переменных разделяется знаком &:
test.asp?var1=abc&var2=def
Кроме того, чтобы задавать параметры в URL, можно воспользоваться формами
HTML. В вызывающей странице пишем так:
<form method="get" action="test.asp">
<input type=text name="var1" value=" default">
<input type=hidden name="var2" value=" value2">
<input type=submit value="Submit Form">
</form>
Исходная форма имеет вид:
default
Submit Form
При этом пользователь увидит форму из одного поля ввода (var1), в нем будет значение по умолчанию " default". Второе поле (var2) будет невидимо и будет передавать всегда фиксированное значение " значение 2". Кнопка "Submit Form" завершает заполнение формы и передает все переменные на test.asp (action).
Если
method="get",
переменные
передаются
через
URL:
test.asp?var1=default&var2=value2.
Если method="post", передаются вместе с запросом так, что внешне передача
переменных не заметна.
29
2.2 Установка программного обеспечения для ASP.NET
Отметим, что для поддержки ASP.NET, как правило, необходим Internet
Information Server и установленный Microft Net Framework. Это программная
технология от компании Microsoft, предназначенная для создания обычных
программ и WEB-приложений.
Установка
программного
обеспечения
начинается
со
скачивания
дистрибутива .NET Framework (с сайта Microsoft). ASP.NET распространяется как
составная часть .NET Framework. Перед установкой .NET Framework, необходимо
установить Internet Information Server (IIS), который, как правило, поставляется
вместе с дистрибутивом Windows и устанавливается через меню «Пуск/Панель
управления/Установка и удаление программ/Установка компонентов Windows».
Рис. 6. Инсталляция WEB-сервера IIS
Одной из основных идей Microsoft .NET является совместимость различных
служб, написанных на разных языках. Например, служба, написанная на C++ для
Microsoft .NET, может обратиться к методу класса из библиотеки, написанной на
Delphi; на C# можно написать класс, наследованный от класса, написанного на
Visual Basic .NET, а исключение, созданное методом, написанным на C#, может
быть перехвачено и обработано в Delphi. Каждая библиотека (сборка) в .NET имеет
сведения о своей версии, что позволяет устранить возможные конфликты между
разными версиями сборок.
30
После установки .NET FrameForks, в Администраторе IIS можно постмотреть
версию ASP.NET и месторасположения конфигурационного файла (рис.7).
Рис. 7. Просмотр свойств ASP.NET после инсталляиции .Net Framework
Отметим, что файлы ASP.NET имеют, как правило, расширение «*.aspx».
Обратите
внимание,
что
после
установки
Net
Framework
такие
файлы
обрабатываются в IIS с помощью ISAPI фильтра – aspnet_isapi.dll (рис. 8).
Рис. 8. Просмотр ссылки на обработчик сценариев ASP.NET в Администраторе
IIS.
Также для каждого виртуального каталога IIS можно создать единственный
файл global.asax, с помощью которого управлять поведением сайта в зависимости
от событий, связанных с поведением пользователей (например, события начала и
окончания пользовательской сессии).
31
Пример, файла global.asaх.
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
'Sub Session_OnStart
'**Put your code here **
'End Sub
'EventName
Description
'Session_OnStart
Runs the first time a user runs any page in your application
'Session_OnEnd
Runs when a user's session times out or quits your application
'Application_OnStart
Runs once when the first page of your application is run for the
first time by any user
'Application_OnEnd
Runs once when the web server shuts down
Sub Session_OnStart
'Этот код выполняется при старте пользовательской сессии
End Sub
</SCRIPT>
2.3 Полезные конструкции на ASP.NET
Если на сервере установлены дополнительные компоненты, их можно использовать из ASP.NET Стандартные объекты (например, из библиотек ADO
(Connection и Recordset) и Scripting (Dictionary, FileSystemObject)) доступны всегда.
Установка новой компоненты обычно состоит в копировании dll-файла в каталог на
сервере и ее регистрации с помощью программы regsvr32.exe.
Создать экземпляр объекта можно так:
Set var = Server.CreateObject("Class.Object")
Class.Object указываются в документации на компоненту.
В переменной var запоминается ссылка на созданный экземпляр объекта. Когда объект не нужен, ссылку нужно обнулить с помощью команды:
Set var = Nothing
32
Отметим что для передачи данных между страницами, можно воспользоваться механизмом сессий. ASP.NET, используя cookies, предоставляет программисту
специальное средство - объект Session (сессия). Сессия стартует, когда новый пользователь обращается к любому aspx-файлу приложения. Сессия заканчивается при
отсутствии активности пользователя в течение, как правило, 20 минут. Специальный объект Session хранит состояние сессии. Туда можно записывать переменные,
которые доступны из любой страницы в этой сессии.
Записать данные в этот объект можно следующим образом:
Session("var") = var
Для считывания значения можно использовать такую запись:
var = Session("var")
Наряду с объектом Session существует объект Application. Если сессия создается для каждого нового пользователя, до Application существует в единственном
экземпляре, и может использоваться всеми страницами приложения.
Application("var") = var
var = Application("var")
Чередование ASP.NET/HTML
Если нужно выдать большой кусок HTML, можно не пользоваться
Response.Write. Если в asp-файле встречается кусок текста вне скобок <% %>, он
трактуется просто как HTML, который надо вывести. Пример:
<% If var="VAL" Then %>
Выполняется первый блок HTML-кода
…
<% Else %>
Выполняется другой блок HTML-кода
…
Обратите внимание. В ASP.NET в отличие от ASP, обязательно нужно объявлять
тип используемых переменных. Обычно это деляается вначале ASP.NET скрипта.
33
<%
Dim dbs As Object
Dim rs1 as Object
dbs = CreateObject("ADODB.Connection")
…………………………………………………..
%>
В противном случае выдается ошибка.
Отметим, что можно выносить повторяющийся код в отдельный файл, и подключать к разным другим по мере необходимости с помощью команды include. Это
весьма удобно, если есть потребность вынести повторяющийся код в отдельный
файл и использовать многократно в разных страницах:
<!--#include file="filename.inc" -->
2.4 Управляющие структуры ASP.NET
Вы можете использовать операторы цикла, такие как for и while.
<%
While (условие)
‘Здесь некоторый код на VB.NET
End While
for i=1 To J
‘Здесь некоторый код на VB.NET
Next i
%>
Отметим, что логические операторы также имеют довольно простую форму,
например, следующую.
IF Not VarType(rs3.Fields(3).Value)=1 Then
var_name=CStr(rs3.Fields(3).Value)
34
else
var_name=""
End if
В
этом
примере,
функция
VarType()
проверят
соответствие
переменной
определенному типу по значению, и в зависимости, от результата, либо, считывает
значение из СУБД, либо записывает в переменную var_name пустое значение.
Функция CStr выполняет приведение текущего типа переменной к текстовому.
2.5 Работа с файловой системой
Для ASP.NET при работе с файловой системой целесообразно использовать
объектную модель FSO (File System Object).
Ниже представлен пример создания файла на жестком диске с помощью
ASP.NET скрипта с последующей записей значений, извлекаемых из некоторой
СУБД, в формате XML.
<%
' rootPath – переменная, в которой храниться путь к папке, в которой создаем файл
‘rs2.Fields(2).Value – название файла (извлекаемое из СУБД)
fso = CreateObject("Scripting.FileSystemObject")
file = fso.CreateTextFile(rootPath+"\"+cStr(rs2.Fields(2).Value) + ".xml",true,true)
file.WriteLine("<anychart>")
file.WriteLine("<settings>")
file.WriteLine("<misc_settings use_embed_fonts_only='false' /> ")
‘Здесь некторый блок кода, формирующий XML-поток
file.WriteLine("</anychart>")
file.Close
35
2.6 Базы данных и ASP.NET
Из ASP.NET можно легко и просто работать с любыми СУБД. Это делается
через две промежуточные технологии: ODBC и ADO (ADO.NET).
ODBC позволяет организовать доступ к любым СУБД через унифицированный интерфейс с помощью языка SQL. Специфика конкретных СУБД учитывается
при помощи специальных драйверов БД. Такие драйверы существуют для всевозможных СУБД (в частности SQL Server, Oracle, Access, FoxPro). Поддержка ODBC
обеспечивается на уровне операционной системы Windows. Настройка – через Панель управления/ODBC.
Рис. 9. Настройка источников данных ODBC.
Базовым понятием является источник данных или data source. Источник данных – это совокупность сведений о базе данных, включая ее драйвер, имя компьютера и файла, параметры. Чтобы воспользоваться базой, необходимо создать источник данных для нее. Важно, чтобы источник данных был "системным", в отличии
от "пользовательского". После этого надо лишь знать имя источника данных.
ADO – это совокупность объектов, доступных из ASP.NET (ASP), позволяющих обращаться к источнику данных ODBC (или OLE DB). Фактически нужны
лишь 2 объекта – Connection, представляющий соединение с базой данных и
Recordset, представляющий набор записей, полученный от источника. Сначала
36
необходимо открыть соединение, потом к нему привязать Recordset, потом, пользуясь методами Recordset, обрабатывать данные.
Пример 1. Доступ к СУБД через имя источника ("Data-Source-Name"), настроенного в Администраторе источников ODBC
Dim Conn, RS, strSQL, strOut
strOut = ""
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Data-Source-Name"
Set RS = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM AGENTS ORDER BY USER_ID"
RS.Open strSQL, Conn
RS.MoveFirst
strOut = strOut & "<P>Here is the data:"
strOut = strOut & "<TABLE BORDER=""1"">"
strOut = strOut & "<TR><TH>USER_ID</TH><TH>Name</TH></TR>"
Do While Not RS.EOF
strOut = strOut & "<TR>"
strOut = strOut & "<TD>" & RS.Fields("USER_ID") & "</TD>"
strOut = strOut & "<TD>" & RS.Fields("NAME") & "</TD>"
strOut = strOut & "</TR>"
RS.MoveNext
Loop
strOut = strOut & "</TABLE>"
strOut = strOut & "<HR>"
strOut = strOut & "That's it!"
RS.Close
Set RS = Nothing
Conn.Close
37
Set Conn = Nothing
Response.Write strOut
%>
Пример 2. Доступ к СУБД через имя драйвера (на примере MS SQL Server).
dbs = CreateObject("ADODB.Connection")
dbs.ConnectionString = "driver={SQL
Server};server=.\SQLEXPRESS;uid=sa;pwd=;database=GRAF"
dbs.ConnectionTimeout = 5
dbs.Open
dbs.CommandTimeout = 0
Отметим, что в настоящее время для ASP.NET рекомендуется также использовать объектную модель ADO.NET, существенно отличающуюся от объектной
модели ADO.
ADO.NET поддерживает модель поставщиков. Поставщики для конкретного источника данных можно определить как совокупность классов в одном пространстве
имен созданных специально для данного источника данных. Эта особенность несколько размыта для источников данных OleDb, ODBC, так как они по своей сути
созданы для работы с любой базой данных совместимых с OLE и ODBC.
В подключаемой части ADO.NET имеются следующие основные классы подсоединенных объектов:

Connection. Этот класс, позволяющий устанавливать подключение к источнику данных. ( OleDbConnection, SqlConnection, OracleConnection)

Transaction.
Объект
OracleTransaction.
В
транзакций
ADO.NET
(OleDbTransaction,
имеется
SqlTransaction,
пространство
имен
System.Transaction)

DataAdapter. Это своеобразный шлюз между автономными и подключенными аспектами ADO.NET. Он устанавливает подключение, и если подключе38
ние уже установлено, содержит достаточно информации, чтобы воспринимать данные автономных объектов и взаимодействовать с базой данных.
(DataAdapter - SqlDataAdapter, OracleDataAdapter)

Command. Это класс представляющий исполняемую команду в базовом источнике данных.

Parameter. Объект параметр команды.

DataReader. Это эквивалент конвейерного курсора с возможностью только
чтения данных в прямом направлении.
Объектная модель ADO.NET
Рис. 10. Объектная модель ADO.NET.
Обратите внимание. Для использования ADO.NET в ASP.NET нужно вначале импортировать соответствующее пространство имен.
<% 'ДЛЯ ADO Managed Provider %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.ADO" %>
<% 'ДЛЯ SQL Managed Provider %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SQL" %>
39
Пример 3. Подключение к СУБД Access, считывание данных при помощи
ADO.NET и вывод на WEB-страницу
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.ADO" %>
<%
'путь к бд и имя таблицы для выполнения запроса
Dim DBFileName As String = "db\db.mdb"
Dim DBTableName As String = "[TableName]"
'инициализируем объекты для работы с бд
Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=" & DBFileName)
Dim cmd As New OleDb.OleDbCommand("SELECT * FROM " & DBTableName, cn)
Dim da As New OleDb.OleDbDataAdapter(cmd)
Dim tbl As New DataTable
'заполняем набор данных
da.Fill(tbl)
'выводим данные
For Each Row As DataRow In tbl.Rows
Response.Write(Join$(Row.ItemArray())+"<BR>")
Next Row
'освобождаем ресурсы
tbl.Dispose()
da.Dispose()
cmd.Dispose()
cn.Dispose()
%>
40
Раздел 3. Разработка приложений для WEB с использованием
MySQL
3.1 Введение в MySQL
MySQL Server относиться к классу реляционных СУБД, максимально адаптированных для WEB-разработки и отличается расширенной функциональностью
(возможность хранения данных терабайтного объема, поддержка хранимых процедур и триггеров, кроссплатформенность и т.д.) и вместе с тем относится к технологиям класса open source (открытого кода), т.е. не требует лицензирования и является свободно распространяемой СУБД.
Кроссплатформенная СУБД MySQL. (официально произносится, «май-эскью-эль») — бесплатно распространяемая система управления базами данных
(СУБД). MySQL является собственностью компании Sun Microsystems, осуществляющей разработку и поддержку приложения. Распространяется под GNU General
Public License и под собственной коммерческой лицензией, на выбор. Помимо этого
компания MySQL AB разрабатывает функциональность по заказу лицензионных
пользователей, именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации. MySQL портирована на большое количество платформ: AIX, BSDi, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD, OpenBSD,
OS/2 Warp, SGI IRIX, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows Server
2003, Windows Vista и Windows 7. Существует также порт MySQL к OpenVMS.
Важно отметить, что компания MySQL AB предоставляет для свободной загрузки
не только исходные коды СУБД, но и откомпилированные и оптимизированные под
конкретные операционные системы готовые исполняемые модули. MySQL имеет
API для языков Delphi, C, C++, Эйфель, Java, Лисп, Perl, PHP, Python, Ruby,
Smalltalk и Tcl, библиотеки для языков платформы .NET, а также обеспечивает поддержку для ODBC посредством ODBC-драйвера MyODBC. Отметим, что максимальный объем Хранилища MySQL, начиная с версии 3.23+ : до 8 миллионов тера41
байт. (2 ^ 63).
MySQL
разработал
Михаэль
Видениус
(Michael
Widenius,
monty@analytikerna.se). MySQL является относительно небольшой и быстрой реляционной СУБД основанной на традициях Hughes Technologies Mini SQL (mSQL).
Последнюю версию MySQL можно скачать с www.tcx.se.
Важнейшие преимущества СУБД MySQL.

Кроссплатформенность (возможность инсталляции на различные операционные системы, в том числе Windows и Unix).

Многопоточность. Поддержка нескольких одновременных запросов.

Оптимизация связей с присоединением многих данных за один проход.

Записи фиксированной и переменной длины.

ODBC драйвер в комплекте с исходником.

Гибкая система привилегий и паролей.

До 16 ключей в таблице. Каждый ключ может иметь до 15 полей.

Поддержка ключевых полей и специальных полей в операторе
CREATE.

Поддержка чисел длинной от 1 до 4 байт (ints, float, double, fixed),
строк переменной длины и меток времени.

Интерфейс с языками PHP, .NET, C, perl и др.

Основанная на потоках, быстрая система памяти.

Утилита проверки и ремонта таблицы ( isamchk).

Все данные хранятся в формате ISO8859_1.

Все операции работы со строками не обращают внимания на регистр
символов в обрабатываемых строках.

Псевдонимы применимы как к таблицам, так и к отдельным колонкам
в таблице.

Все поля имеют значение по умолчанию. INSERT можно использовать
на любом подмножестве полей.
42

Легкость управления таблицей, включая добавление и удаление ключей и полей.
Интерфейсы с другими языка программирования
Наиболее простой способ работы с MySQL сводится к использованию программы MySQL. Это клиентская часть СУБД MySQL. Можно выполнять команды
SQL непосредственно из командной строки системы unix или из интерактивного
режима MySQL. Подробнее о клиентских программах.
СУБД MySQL имеет библиотеку C API. Ее можно использовать для запросов к
базе данных, вставки данных, создания таблиц и т.п. C API поддерживает все функции MySQL.
Язык perl поддерживается сразу двумя способами:

Портирован интерфейс с perl из mini-SQL, разработанный Андреасом
Коенигом (Andreas Koenig a.koenig@mind.de ).

Есть модуль perl DBD
Также доступен 32-битный ODBC драйвер для MySQL. Он позволяет запрашивать и получать данные из других источников с поддержкой ODBC. С подробностями можно ознакомиться на домашней страничке MySQL (увы, только на английском языке).
Важнейшим преимуществом MySQL является возможность бесшовной (native) интеграции с языком программирования PHP.
3.2 Взаимодействие MySQL и PHP.
В этом примере показано как в PHP легко обрабатывать данные с HTML –
форм.
Создадим простой HTML файл.
<HTML>
<HEAD>
<TITLE>Запрос информации</TITLE>
43
<BODY>
<CENTER>
Хотите больше знать о наших товарах?
<P>
<TABLE WIDTH = 400><TR><TD align = right>
<FORM ACTION="email.php3" METHOD="POST">
Ваше имя:<BR>
<INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30">
<P>
Ваш email:<BR>
<INPUT TYPE="text" NAME="email" SIZE="20" MAXLENGTH="30">
<P>
Меня интересуют:
<SELECT NAME="preference">
<OPTION value = "Яблоки">Яблоки
<OPTION value = "Апельсины">Апельсины
</SELECT>
<P>
<INPUT TYPE="submit" VALUE="Отправить запрос!">
</FORM>
</TD></TR></TABLE></CENTER>
</BODY>
</HTML>
Назовем этот файл request.html. В нем мы указали, что данные формы будут
обрабатываться файлом email.php3. Приведем его содержание:
<?
/* Этот скрипт получает переменные из request.html */
44
PRINT "<CENTER>";
PRINT "Привет, $name.";
PRINT "<BR><BR>";
PRINT "Спасибо за ваш интерес.<BR><BR>";
PRINT "Вас интересуют $preference. Информацию о них мы пошлем вам на email:
$email.";
PRINT "</CENTER>";
?>
Теперь, если пользователь вызовет request.html и наберет в форме имя “Вася”, email: vasya@pupkin.com и скажет, что его интересуют “Яблоки”, а после этого
нажмет "Отправить запрос!", то в ответ вызовется email.php3, который выведет на
экран примерно следующее:
Привет, Вася
Спасибо за ваш интерес.
Вас интересуют Яблоки. Информацию о них мы пошлем вам на email:
vasya@pupkin.com
Теперь мы должны сдержать обещание и выслать email.
Для этого в PHP есть функция MAIL.
Синтаксис: void mail(string to, string subject, string message, string add_headers);
to – email адрес получателя.
subject – тема письма.
message – собственно текст сообщения.
add_headers – другие параметры заголовка письма (необязательный параметр).
Допишем в конец файла email.php3 следующий код:
<?
mail($email, "Запрос на информацию", "$name\n
Спасибо за ваш интерес!\n
Вас интересуют $preference\n
45
Мы их распространяем бесплатно. Обратитесь в ближайший филиал нашей компании и получите ящик этого продукта.\n
");
mail("administration@me.com",
"Был запрос на информацию.",
"$name интересовали $preference\n
email-адрес: $email. \n");
?>
Вот теперь пользователь будет получать письмо с более подробной информацией о наших товарах. Также письмо получит и администратор сайта.
Когда интересующихся нашими товарами станет очень много, мы захотим их както упорядочить и хранить информацию о них в базе данных. Об этом в следующем
примере.
Работа с MySQL (сохранение данных в базе данных).
Для начала создаем базу данных и таблицу. Входим в MySQL, и выполняем команды:
>CREATE DATABASE products;
>CREATE TABLE clients (name VARCHAR(25), email VARCHAR(25), choise VARCHAR(8));
Для общения с MySQL из PHP понадобятся следующие функции.
int mysql_connect(string hostname, string username, string password);
Создать соединение с MySQL.
Параметры:
Hostname – имя хоста, на котором находится СУБД.
Username – имя пользователя.
Password – пароль пользователя.
Функция возвращает параметр типа int, который больше 0, если соединение прошло
успешно, и равен 0 в противном случае.
int mysql_select_db(string database_name, int link_identifier);
46
Выбрать базу данных для работы.
Параметры:
Database_name – имя базы данных.
link_identifier – ID соединения, которое получено в функции mysql_connect. (параметр необязательный, если он не указывается, то используется ID от последнего вызова mysql_connect)
Функция возвращает значение true или false
int mysql_query(string query, int link_identifier);
Функция выполняет запрос к базе данных.
Параметры:
Query – строка, содержащая запрос
link_identifier – см. предыдущую функцию.
Функция возвращает ID результата или 0, если произошла ошибка.
int mysql_close(int link_identifier);
Функция закрывает соединение с MySQL.
Параметры:
link_identifier – см. выше.
Функция возвращает значение true или false
Теперь наш файл email.php3 будет иметь след. вид:
<?
/* Этот скрипт получает переменные из request.html */
/* Некоторые переменные */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
47
/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";
/* email администратора */
$adminaddress = "administration@me.com";
/* создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");
PRINT "<CENTER>";
PRINT "Привет, $name.";
PRINT "<BR><BR>";
PRINT "Спасибо за ваш интерес.<BR><BR>";
PRINT "Вас интересуют $preference. Информацию о них мы пошлем вам на email:
$email.";
PRINT "</CENTER>";
/* Отправляем email */
mail($email, "Запрос на информацию", "$namen\n
Спасибо за ваш интерес!\n
Вас интересуют $preference\n
Мы их распространяем бесплатно. Обратитесь в ближайший филиал нашей компании и получите ящик этого продукта.\n
");
48
mail("administration@me.com",
"Был запрос на информацию.",
"$name интересовали $preference\n
email-адрес: $email. \n");
/* Вставить информацию о клиенте в таблицу */
$query = "INSERT INTO $userstable VALUES('$name','$email', '$preference')";
$result = MYSQL_QUERY($query);
PRINT "Информация о вас занесена в базу данных.";
/* Закрыть соединение */
MYSQL_CLOSE();
?>
Вот так легко можно работать с базой данных в PHP. Теперь кроме письменных уведомлений, информация о клиенте и его интересах будет заносится в таблицу MySQL.
Работа с MySQL (получение данных из базы данных).
После занесения данных, нас иногда будет интересовать вопрос так кого же
из наших клиентов интересует товар “Яблоки” (не путать с Apple Macintosh).
Напишем скрипт apple.php3
<?/* Скрипт показывает клиентов, которые яблоки любят больше чем апельсины */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
49
/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";
/* создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");
/* Выбрать всех клиентов - яблочников */
$query = "SELECT * FROM $userstable WHERE choice = 'Яблоки'";
$result = MYSQL_QUERY($query);
/* Как много нашлось таких */
$number = MYSQL_NUMROWS($result);
/* Напечатать всех в красивом виде*/
$i = 0;
IF ($number == 0) {
PRINT "<CENTER><P>Любителей яблок нет</CENTER>";
} ELSEIF ($number > 0) {
PRINT "<CENTER><P>Количество любителей яблок: $number<BR><BR>";
WHILE ($i < $number){
$name = mysql_result($result,$i,"name");
$email = mysql_result($result,$i,"email");
PRINT "Клиент $name любит Яблоки.<BR>";
50
PRINT "Его Email: $email.";
PRINT "<BR><BR>";
$i++;
}
PRINT "</CENTER>";
}
?>
Здесь мы использовали две новых функции:
int mysql_num_rows(int result);
Функция возвращает количество строк в результате запроса.
Параметр result – содержит ID результата запроса.
int mysql_result(int result, int i, column);
Функция возвращает значение поля в столбце column и в строке i.
Таблица 2. Функциональные возможности различных версий СУБД MySQL
Возможность
Версия MySQL
Подзапросы
4.1
Внешние ключи
5.0 (3.23 с InnoDB)
Представления
5.0
Хранимые процедуры
5.0
Триггеры
5.0
Объединения
4.0
Полные связи
4.1
Ограничения
4.1 или 5.0
51
Возможность
Версия MySQL
Курсоры
4.1 или 5.0
R-деревья
4.1 (для таблиц MyISAM)
Наследование таблиц
Не планируется
Расширяемая система типов
Не планируется
3.3 Визуальные средства проектирования для MySQL.
В настоящее время существуют различные средства визуального проектирования и администрирования для СУБД MySQL, среди которых, можно выделить
систему EMS SQL Manager for MySQL (http://www.sqlmanager.net/).
Данная система позволяет работать с СУБД MySQL, используя визуальные средства проектирования (рис. 11).
Рис. 11. Интерфейс EMS SQL Manager for MySQL.
52
EMS SQL Manager for MySQL – это высокопроизводительная программа для
разработки и администрирования серверов баз данных MySQL. SQL Manager for
MySQL работает с любыми версиями MySQL, начиная с версии 3.23 поддерживает
все самые новые функции MySQL, включая триггеры, представления, хранимые
процедуры и функции, внешние ключи для таблиц InnoDB, UNICODE данные и
другие. SQL Manager for MySQL позволяет быстро и просто создавать и редактировать все объекты баз данных MySQL, визуально проектировать базы данных
MySQL, выполнять сценарии SQL, импортировать и экспортировать базы данных
MySQL, управлять пользователями и их привилегиями, а также предоставляет
множество полезных инструментов для эффективного администрирования MySQL.
Современный графический интерфейс и грамотная система мастеров настроек предельно просты и будут понятны даже начинающему пользователю
Ключевые особенности
1. Полная совместимость со всеми версиями MySQL, начиная с 3.23 по 6.0
включительно.
2. Поддержка данных UTF8.
3. Быстрая навигация и управление СУБД.
4. Элементарное управление всеми объектами MySQL.
5. Эффективные инструменты управления данными .
6. Эффективное управление параметрами безопасности.
7. Великолепные графические и текстовые инструменты для построения запросов.
8. Впечатляющие возможности импорта и экспорта данных.
9. Конструктор отчетов с понятным мастером создания отчетов.
10. Мощный визуальный конструктор баз данных.
11. Удобные мастера для выполнения сервисов MySQL.
12. Доступ к серверу MySQL по HTTP протоколу HTTP туннелю.
13. Доступ к серверу MySQL по HTTP протоколу SSH туннелю.
53
14. К примеру, с помощью EMS SQL Manager for MySQL можно проектировать
триггеры, хранимые процедуры и пр. для MySQL (рис. 12).
Рис. 12. Создание триггера для таблицы MySQL
В данном примере (рис. 12), триггер выполняется каждый раз после вставки
очередной записи в таблицу «period». При этом, выполняется запрос к другим таблицам СУБД (таблица «exec», поля ID_Exec, ID_Norg) и осуществляется вставка
всех найденных строк в таблицу «status_form», в том числе, новых значений первичного ключа NEW.ID_Per таблицы «period».
Пример триггера для MySQL
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a,b INT;
DECLARE cur CURSOR FOR SELECT ID_Exec, ID_Norg FROM exec;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO a, b;
54
IF NOT done THEN
INSERT INTO status_form (ID_Per,ID_Norg,ID_Exec) VALUES (NEW.ID_Per,b,a);
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END
Обратите внимание.
1. на механизм открытия и использования курсоров:
OPEN cur;
REPEAT
FETCH cur INTO a, b;
IF NOT done THEN
INSERT INTO status_form (ID_Per,ID_Norg,ID_Exec) VALUES
(NEW.ID_Per,b,a);
END IF;
UNTIL done END REPEAT;
2. на метод обращения к значениям полей, соответствующим новым строкам
таблицы, для которой создан триггер.
NEW.[Имя столбца таблицы]
Отметим, что аналогичным образом проектируются хранимые процедуры
для MySQL. Только вызов таких процедур, в отличие от триггеров, осуществляется
явным образом. При этом, при вызове хранимой процедуры, возможная динамическая передача некоторых параметров.
55
3. План семинарских занятий
Тема 1. Разработка приложений баз данных для Windows.
Занятие 1. Разработка диалогового интерфейса к БД в MS Excel.
Концепция диалогового интерфейса. Разработка схемы граф-схемы диалога решения прикладной задачи. Разработка в Excel диалоговой формы вывода списка запросов, хранящихся в Access - таблице. Введение в VBA.
Самостоятельная работа: Разработка варианта схемы диалога в MS Excel. Разработка диалоговой формы вывода SQL-запросов в страницу рабочей книги MS Excel
из СУБД Access.
Тема 2. Разработка приложений баз данных для WEB.
Занятие 2. Разработка приложения с элементами пользовательского интерфейса с использованием HTML. Разработка Web-приложения доступа к СУБД с
использованием PHP.
Основы HTML и скриптовых языков (VBScript или JavaScript). Создание формы
ввода данных, для последующей обработки WEB-сервером. Понятие динамической
страницы. Создание динамической страницы вывода данных на JavaScript. Инсталляция PHP и MySQL на ПК. Основы PHP и MySQL. Разработка PHP-сценария для
обработки формы ввода данных созданной на HTML. Подключение к СУБД
MySQL с помощью PHP.
Самостоятельная работа: Разработка Web-приложения обработки данных формы
с использованием JavaScript. Разработка Web-приложения обработки данных формы с использованием PHP и СУБД MySQL.
56
Занятие 3. Разработка Web-приложения доступа к СУБД с использованием
ASP.NET. Проектирование базы данных MySQL для WEB-приложений.
Инсталляция и конфигурирование IIS. Ознакомление с технологией .NET. Разработка ASP.NET сценария с использованием Visual Basic.NET для обработки формы
ввода данных созданной на HTML. Подключение к СУБД MS Access с помощью
ASP.NET и ADO. Изучение ADO.NET. Инсталляция демо-версии EMS SQL Manager for MySQL. Создание простых объектов (реляционных таблиц) с помощью EMS
SQL Manager. Заполнение таблиц тестовыми данными. Ознакомление с визуальными средствами проектирования EMS SQL Manager.
Самостоятельная работа: Разработка Web-приложения обработки данных формы
с использованием ASP.NET, ADO.NET и СУБД MS Access. Разработка простой базы данных с помощью EMS SQL Manager.
Отметим, что для выполнения самостоятельной работы, потребуется наличие
у студентов персональных компьютеров с установленной операционной системой
Windows, MS Office (MS Excel, MS Access), Internet Information Server и бесплатнораспространяемым программным обеспечением MySQL, PHP и EMS SQL Manager
for MySQL Freeware.
57
4. Контрольная работа и методические рекомендации
к ее выполнению
Контрольная работа охватывает, прежде всего, третий и четвертый разделы дисциплины. Поэтому, прежде чем приступить к ее выполнению, рекомендуется ознакомиться с этими разделами (особое внимание обратите на примеры).
Контрольное задание. Требуется разработать форму регистрации и аутентификации пользователей на сайте с использованием какой-нибудь СУБД, например,
MySQL и одной из технологий PHP или ASP.NET по выбору. Данная WEB-форма
обязательно должна содержать следующие поля:
1. Логин пользователя.
2. Пароль пользователя.
3. Фамилия пользователя.
4. Имя пользователя.
5. E-mail пользователя.
Обратите внимание. Не должно быть двух пользователей с одинаковыми логинами и паролями в системе.
Пример, работающей формы регистрации и аутентификации пользователей
имеется на сайте http://data.cemi.rssi.ru/GRAF/experiment.php
58
Рис. 13. Пример системы аутентификации пользователей
Отметим, что каких-либо требований к дизайну формы регистрации и аутентификации пользователей, в рамках контрольной работы, не предъявляются.
Контрольная работа выполняется в компьютерном классе, оснащенным ПК с
установленными программными продуктами: PHP (ASP.NET), MySQL (Access) и
IIS (Apache). Результатом контрольной работы является программный модуль –
файл с расширением *.php или *.aspx. Оценка за контрольную работу выставляется
в зависимости от полноты реализованной функциональности программного модуля.
Время, выделяемое на выполнение контрольного задания – 4 академических
часа.
59
5. Вопросы итогового контроля
1. Приведите пример кода HTML, обеспечивающего вывод формы пользовательского интерфейса на WEB-страницу.
2. Напишите простую функцию JavaScript, обрабатывающую событие нажатия
на кнопку формы, размещенной на WEB-странице.
3. В чем основные отличия XML от HTML. Назовите один и способов подключения каскадных листов стилей (CSS) к файлу XHTML.
4. Можно ли подключиться из JavaScript (VBScript), выполняемого на непосредственно на WEB-странице к СУБД, размещенной на WEB-сервере. Как
можно создавать и использовать многомерные массивы в JavaScript.
5. Напишите код PHP, обеспечивающий обработку данных формы типа
<INPUT type=submit name="action" value="Значение">
и вывод значения формы на WEB-страницу.
6. Напишите код ASP.NET (Visual Basic.NET), обеспечивающий обработку
данных формы типа
<input type=text name="var1" value=" default">
и вывод значения формы на WEB-страницу.
7. Напишите код PHP, обеспечивающий подключение к условной базе данных
MySQL с выполнением запроса типа “select * from table” (без последующей
обработки запроса).
8. Напишите код ASP.NET (VB.NET), обеспечивающий подключение к условной базе данных MS SQL Server с выполнением запроса типа “select * from
table” (без последующей обработки запроса).
9. Напишите простую процедуру обработки запроса к СУБД MySQL с использованием функции mysql_fetch_array() на PHP.
10. Напишите простую процедуру обработки запроса к СУБД MS SQL Server с
использованием объектной модели ADO на ASP.NET (VB.NET).
60
11. Опишите механизм эффективной организации чередования больших блоков
кода HTML с кодом PHP и ASP (VB) в зависимости от условий.
12. Приведите примеры управляющих структур (циклов и условий) для PHP и
ASP.NET (VB.NET).
13. Опишите схему работы с File System Object (FSO) для ASP.NET (VB.NET).
14. Напишите пример кода ASP.NET (VB.NET), обеспечивающего сохранение
данных в переменных сессии с последующим использованием этих данных
на других страницах.
15. Перечислите основные классы подсоединенных объектов ADO.NET.
16. Опишите (в устной форме) схему подключения к СУБД Access из ASP.NET
посредством ADO.NET, а также выполнения и обработки запросов.
17. Перечислите основные возможности системы визуального проектирования
EMS SQL Manager for MySQL. Расскажите о принципах создания и редактирования и связывания объектов в EMS SQL Manager.
18. Опишите схему создания триггеров и хранимых процедур MySQL в EMS
SQL Manager for MySQL. Как используются курсоры и конструкция
NEW.[поле] в коде триггеров MySQL.
61
6. Рекомендуемая литература
Основная литература:
1. Эд Леки-Томпсон, Хьяо Айде-Гудман, Алек Коув, Стивен Д. Новицки. PHP 5
для профессионалов. Издательства: Диалектика, Вильямс, 2006 г.
2. Андерсон Р., Фрэнсис Б., Хомер А. и др. ASP.NET для профессионалов. В 2
томах. Издательство: Лори, 2004 г.
3. Кристина Пейтон, Андре Меллер. PHP 5 & MySQL 5. Издательство: БиномПресс, 2007 г.
Дополнительная литература:
4. Чак Муссиано и Билл Кеннеди. HTML и XHTML. Подробное руководство. Издательство: Символ-Плюс, 2008 г.
5. Дэвид Флэнаган. JavaScript. Подробное руководство. Издательство: СимволПлюс, 2008 г.
6. Эрик А. Мейер. CSS. Каскадные таблицы стилей. Подробное руководство. Издательство: Символ-Плюс, 2008 г.
7. Хэт Хенриксон, Скотт Хоффман. IIS 6. Полное руководство. Издательство:
Эком, 2004г.
8. Кристиан Дари, Богдан Бринзаре, Филип Черчез-Тоза, Михай Бусика. AJAX и
PHP. Разработка динамических веб-приложений. Издательство: Символ-Плюс,
2006г.
9. Артемий Ломов. Самоучитель Apache, Perl, MySQL. Практика создания динамических сайтов (+ CD-ROM). Издательство: БХВ-Петербург, 2007г.
10. Николас Закас, Джереми Мак-Пик, Джо Фосетт. Ajax для профессионалов. Издательство: Символ-Плюс, 2008г.
11. Герасимов Н.А.Практикум по разработке диалоговых систем и баз данных в
Web-среде – М., РИО Российская Экономическая Академия им. Г.В. Плеханова , 2005, 108 с
62
ОБ АВТОРЕ
Акопов Андраник Сумбатович – доктор технических наук, старший научный сотрудник ЦЭМИ РАН, профессор кафедры «Бизнес-аналитики» факультета «Бизнес-информатики» Государственного университета - Высшая Школа
Экономики, сертифицированный специалист по информационным Хранилищам данных (SAP Business Warehouse).
Aakopov@hse.ru
63
Скачать