Бд. Программа учебной практики 2 курс бакалавриата 2012. Правительство Российской Федерации
Скачать 1.38 Mb.
|
ВведениеВ настоящее время количество приложений с использованием систем управления реляционными базами данных (СУБД) неуклонно растет. Особенно на этом фоне выделяются разработки под Интернет. Современные информационные системы, такие как динамические 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 имеет преимущество в скорости по сравнению со скриптовыми технологиями, так как при первом обращении код компилируется и помещается в специальный кэш, и впоследствии только исполняется, не требуя затрат времени на парсинг, оптимизацию, и т. д. Существуют и другие языки программирования и технологии создания динамических 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, в частности, на примере MySQL; изучение наиболее типичных примеров создания динамических WEB-страниц, взаимодействующих с СУБД. Освоение темы предполагает знание основ технологий реляционных баз данных, программирования на языках: Си, Visual Basic и SQL, а также теоретических основ веб-дизайна (HTML, CSS и др.). Раздел 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». 1.1 Введение в PHPСледующий код Дает Hello, World! Имена переменных обозначаются знаком $. То же самое "Hello, World!" можно получить следующим образом: $message = "Hello, World!"; echo($message); ?> Конкатенация (присоединение) строк осуществляется с помощью . (точки); обычные арифметические операции определяются так, как Вы того и ожидаете: $greeting = "Hello "; $num = 3 + 2; $num++; echo ("$greeting.$num.”people!“); ?> даст Hello 6 people! Обратите внимание. Синтаксис PHP очень похож на C. Cтрока, заключенная в двойные кавычки, означает, что встречающиеся в этой строке переменные будут заменены их значениями, в то время как если строка заключена в одинарные кавычки, такая замена не производится. Так $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 Такой сценарий: $action = $_REQUEST[‘sbt']; // Можно также использовать $_POST[‘sbt']; echo($action); ?> Даст результат: Вход после нажатия на кнопку «Вход» Очевидное достоинство 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, Вы получаете доступ к данным формы. Можете сохранить эти данные в Базе Данных и т.д. 1.2 Установка интерпретатора PHPШаг 1. Распакуйте дистрибутив в папку C:\PHP Шаг 2. Настройте Internet Information Server на своем локальном компьютере, так чтобы выполнялась обработка файлов с расширением *.php. Для этого нужно зайти в Панель управления Windows, далее – Администрирование, далее - Диспетчер служб IIS. Затем нужно добавить обработку php-сценариев фильтром ISAPI для всех узлов по умолчанию с помощью вкладки «Фильтры ISAPI» (рис. 1) Рис. 1. Добавление фильтра ISAPI для обработки PHP-сценариев. Отметим, что InternetServerApplicationProgrammingInterface (ISAPI) — это API (ApplicationProgrammingInterface - набор готовых классов, функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах.) для Internet Information Services, коллекции сетевых служб Microsoft Windows. Соответственно, фильтры ISAPI представляют собой динамические библиотеки DLL, напрямую взаимодействующие с IIS. Далее, нужно добавить «Сопоставление сценария PHP с исполняемым файлом ISAPI-фильтра (php5isapi.dll). Это можно сделать в разделе «Сопоставление обработчиков» системы администрирования IIS (рис. 2). Рис. 2. Настройка «Сопоставления обработчиков» IIS для PHP. Обратите внимание. Для различных версий ОС 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 таким кодом: phpinfo(); ?> Должен быть получен вот такой результат Рис. 4. Оценка корректности установки и конфигурирования PHP. Обратите внимание на параметр Loaded Configuration File. К примеру, в нашем случае он имеет следующее значение: «C:\Program Files\PHP\php.ini». Это означает, что кофигурационный файл, с помощью которого Вы можете переопределять параметры PHP модуля, находится в папке «C:\Program Files\PHP), и загружен успешно. Шаг5. Сконфигурируйте файл php.ini под Ваши задачи. Рис. 5. Конфигурирование PHP под собственные задачи. 1.3 Полезные конструкции на PHPinclude("login.php"); //Вставка файла login.php в текущий файл //Здесь произвольный HTML код //Данный блок кода будет выполнятся, только если переменная $action примет значение «Вход», т.е. если Пользователь нажмет на кнопку «Вход …………………………………… //Функция isset позволяет проверить установлено ли значение переменной $action if(!isset($action)) $action=""; Простейший способ установить cookie на PHP таков: setcookie('name', 'bret'); Затем, для каждой последующей страницы на Вашем сайте, просматриваемой в течение данной сессии (пока пользователь не покинет сайт) переменная $name будет иметь значение 'bret' и его можно легко прочитать средствами PHP. Этот тип cookie известен как cookie-сессия, поскольку значение сохраняется в течение пользовательской сессии. С помощью cookie можно создать, в частности, «Корзину покупок» для Интернет-магазина или запомнить «профиль» пользователя. Если Вы хотите, чтобы значение cookie запоминалось браузером после того, как пользователь закончит сессию, Вы должны передать функции setcookie() третий параметр - дату истечения срока действия cookie. Поскольку PHP сформировался в основном в среде Unix, Вы должны представить время истечения срока действия cookie как число секунд, прошедших с 1 января 1970 г. Например, если Вы хотите, чтобы срок действия cookie истек 1 января 2000 г., Вы записываете: $y2k = mktime(0,0,0,1,1,2000); setcookie('name', 'bret', $y2k); ?> cookie Обратите внимание. В силу того, как организована обработка cookies в протоколе HTTP, необходимо установить значения всех cookie до вывода какого-либо текста. Если сделать наоборот, PHP выдаст Вам предупреждение и значение cookie не будет послано. Вот так правильно: 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. 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;} } 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 /* Некоторые переменные */ $hostname = "localhost"; $username = "myusername"; $password = "mypassword"; $dbName = "products"; /* создать соединение */ MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db("$dbName"); /* Осуществляем определенные операции с СУБД */ /* Закрыть соединение */ MYSQL_CLOSE(); ?> Обратите внимание. Для работы с MySQL из PHP нет необходимости в каких либо дополнительных модулях. MySQL «родная» СУБД для PHP. Пример 2. Создание соединения и выбор базы данных для MS SQL Server. /* Некоторые переменные */ $hostname = "localhost"; $username = "myusername"; $password = "mypassword"; $dbName = "products"; /* создать соединение */ $link = MSSQL_CONNECT($hostname,$username,$password) or die ("Не могу создать соединение "); Mssql_select_db ("$dbName“, $link); /* Осуществляем определенные операции с СУБД */ /* Закрыть соединение */ MSSQL_CLOSE(); ?> Обратите внимание. Для работы с MS SQL Server из PHP (и другими СУБД кроме MySQL), необходимо подключить специальный модуль, соответствующий данной СУБД. Данная операция осуществляется в файле php.ini, посредством удаления знака «;» в соответсвующей строке файла, т.е. Фрагмент файла php.ini: [PHP_MSSQL] (extension=php_mssql.dll) Обратите внимание, что если Вы используется в качестве сервера хорошо известную платформу MS SQL Server Express Edition, то строка соединения с базой данных «TEST» (в режиме аутоинтификации SQL Server, т.е. по логину «sa») будет иметь следующий вид: $link = mssql_connect (".\SQLEXPRESS","sa","") or die ("Could not connect"); Mssql_select_db("TEST", $link); ?> Обратите внимание на имя сервера СУБД ".\SQLEXPRESS". Пример 3. Создание новой таблицы в MS SQL с помощью 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), 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 создана успешно "); ?> Пример 4. Заполнение таблицы в MS SQL с помощью 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) 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. Выполнение запроса к базе по заданному критерию $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"]; $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 -- Обрабатывает ряд результата запроса и возвращает неассоциативный массив. 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. |