Автор работы: Пользователь скрыл имя, 29 Декабря 2012 в 21:00, курсовая работа
MySQL – это одна из самых популярных и самых распространенных СУБД (система управления базами данных) в интернете. Она не предназначена для работы с большими объемами информации, но ее применение идеально для интернет сайтов, как небольших, так и достаточно крупных.
MySQL отличается хорошей скоростью работы, надежностью, гибкостью. Работа с ней, как правило, не вызывает больших трудностей. Поддержка сервера MySQL автоматически включается в поставку PHP.
Введение………………………………………………………………...2
1. СОЕДИНЕНИЕ РНР-СЦЕНАРИЕВ с таблицами MySQL ……….4
1.1.Соединение с сервером. Функция mysql_connect ………...4
1.2. Разрыв соединения с сервером. Функция mysql_close …..5
1.3. Создание базы данных. Функция CREATE DATABASE ..5
1.4. Выбор базы данных. Функция mysql_select_db…………..7
1.5 Обработка ошибок…………………………………………..7
1.6 Автоматизация подключения к MySQL. Файл (config.php)8
2. ВЫПОЛНЕНИЕ ЗАПРОСОВ К БАЗЕ ДАННЫХ ………………...10
2.1 Создание таблицы. Функция CREATE TABLE:…………...10
2.2 Вставка записей в таблицу. Функция INSERT…………….12
2.3 Удаление записей. Функция DELETE……………………...13
2.4 Обновление записей. Функция UPDATE…………………..13
3. MySQL И ПРОБЛЕМЫ БЕЗОПАСНОСТИ ……………………….23
3.1. Экранирование спецсимволов ……………………………..23
3.2. Шаблоны запросов и placeholders …………………………24
3.3 Пример применения СУБД MySQL………………………..29
4. Назначение и условия применения проекта……………………..34
4.1. Представление скрипта ……………………………………34
4.2. Системные требования …………………………………….34
4.3. Характеристика скрипта …………………………………..34
Заключение……………………………………………………………..35
Список использованной литературы…………………………………36
Приложение А…………………………………………………………3
○ Поле stamp типа timestamp хранит время изменения данной записи. Тип timestamp удобен тем, что значение stamp изменяется сервером MySQL автоматически при вставке или модификации записи.
● Благодаря фразе IF NOT EXISTS MySQL создаст таблицу только при первом запуске скрипта, и ничего не будет делать при последующих запусках.
Рекомендуется всегда создавать таблицы прямо в скриптах, которые с ними работают, потому, что это делает сценарии автономными. К сожалению многие скрипты так не поступают. Обычно к ним прилагается SQL-файл с командами создания таблиц, который нужно запустить перед установкой скриптов. Этот способ не рекомендуется.
● Режим magic_quotes_gpc, устанавливаемый в файле php.ini, заставляет РНР вставлять слэши перед данными, пришедшими из формы. Так разработчики РНР попытались обезопасить программистов, использующих СУБД от распространенной ошибки с апострофами.
Так как мы обрабатываем апострофы самостоятельно (функция mysql_qw()), нам нужно вернуть данные в исходный вид, т. е. убрать из них все лишние слэши.
Можно подумать, что идея с magic_quotes_gpc хороша, и задаться вопросом: а зачем же вообще нужна функция mysql_qw(), если есть magic_quotes_gpc? Ответ на этот вопрос: данные, помещаемые в базу, могут прийти не только из формы, но и из других источников (a magic_quotes_gpc обрабатывает лишь данные формы).
● Выдавая заголовок Location, мы обеспечиваем так называемую самопереадресацию. Зачем она нужна? Попробуйте убрать вызов Header() (и идущий следом exit()), затем добавить в гостевую книгу запись и тут же нажать кнопку «Обновить» в браузере. Появится запрос: хотите ли вы послать данные формы повторно или нет. Если вы ответите «Да», в книгу добавится еще одна запись, идентичная первой. Если же ответите «Нет», то будет показано старое состояние гостевой книги, без только что добавленной записи. Самопереадресация обеспечивает корректность работы кнопки «Обновить», а добавляемое в query_string текущее время гарантирует, что браузер не станет кэшировать страницу.
● Интересна SQL-команда
SELECT *, UNIX_TIMESTAMP(stamp) AS stamp
Тип данных TIMESTAMP хранит информацию о времени в следующем представлении: 20051222000307. Первые 4 цифры определяют год, следующие две — месяц, и т. д. В то же время, для функции PHP date()нужен Unix timestamp-формат — число секунд, прошедших с 1 января 1970 года. Чтобы преобразовать первое представление во второе, используется функция UNIX_TIMESTAMP(), встроенная в MySQL. Суффикс " AS stamp " позволяет добавить вычисленное поле под именем stamp к остальным полям, которые были извлечены звездочкой (*).
В итоговый набор данных поле stamp должно бы было добавиться в конец списка полей, и результат должен бы получиться из 5 колонок (id, stamp, name, text и еще другая stamp, полученная при помощи " AS stamp " — не важно, что она имеет то же имя, что и вторая). Однако использование функции mysql_fetch_assoc() "гасит" первое поле stamp и заменяет его значением последнего.
Таким образом, в итоге переменная $row равна массиву из четырех элементов: (id, stamp, name, text), причем stamp идет в формате Unix timestamp, что и требовалось.
● При выводе данных в браузер их в обязательном порядке обрабатывают функцией htmlspecialchars(), чтобы злоумышленник не смог вставить в сообщение теги и "разрушить" структуру страницы. Обратите внимание, что данные хранятся в БД в исходном виде, а их обработка производится уже в самом конце, непосредственно перед выводом. Такая практика позволяет, например, легко написать скрипт редактирования записей в гостевой книге, или же изменить ее дизайн (например, добавить
4. Назначение и условия применения проекта
В моем курсовом проекте я рассматриваю тематику базы данных. Основным назначением написанного скрипта, состоящего из нескольких файлов является демонстрирование возможности реализации баз данных в среде web сайтов с использованием сервера базы данных MySQL , а также возможностями PHP.
4.1 Представление скрипта
С помощью этого скрипта можно создать на своем сайт небольшую базу данных, с возможностью изменения, добавления и удаления записей. Она подойдет для небольшого сайта. Главное, чтобы была поддержка PHP версии 4 или выше. Скрипт корректно работает при error_reporting=E_ALL и register_globals=off.(Это настройки PHP.INI).
4.2 Системные требования
Скрипт разрабатывался и тестировался под Windows 7, Apache 1.3.24, PHP 4.3.0. Отлично функционирует на сервере Agava(h1, h10, h11, h12).
Для полноценной работы скрипта необходимо:
Работу скрипта можно посмотреть по адресу:
(Z:\home\localhost\www\
4.3 Характеристика скрипта
Заключение
Средства эффективного хранения и выборки больших объемов информации внесли огромный вклад в успешное развитие Интернета. Обычно для хранения информации используются базы данных. Работа таких известных сайтов, как Yahoo, Amazon и Ebay, в значительной степени зависит от надежности баз данных, хранящих громадные объемы информации. Конечно, поддержка баз данных ориентирована не только на интересы гигантских корпораций — в распоряжении web-программистов имеется несколько мощных реализаций баз данных, распространяемых по относительно низкой цене (а то и бесплатно).
Правильная организация базы данных обеспечивает более быстрые и гибкие возможности выборки данных. Она существенно упрощает реализацию средств поиска и сортировки, а проблемы прав доступа к информации решаются при помощи средств контроля за привилегиями, присутствующими во многих системах управления базами данных (СУБД). Кроме того, упрощаются процессы репликации и архивации данных.
В моем курсовом проекте подробно описана выборка и обновления данных в MySQL — вероятно, самой популярной СУБД, используемой в PHP ( http://www.mysql.com ). Использовался язык PHP, так как он является наилучшим средством для работы в web среде. Я научился в течении работы использовать свои знания, а также усовершенствовать их. В дальнейшем имеется возможность реализации, а также усовершенствовании скрипта.
Список использованной литературы
Приложение А
Исходный листинг программы:
base.php // скрипт соединения с сервером базы данных, создание базы данных,
<?php // а также создание таблиц базы данных
$Host = "localhost";
$User = "root";
$Password = "";
//соединение с сервером
$link = mysql_connect($Host, $User, $Password);
if (!$link)
die('Нельзя соединиться с севером: ' . mysql_error());
//создание базы данных my_db
$sql = 'CREATE DATABASE my_db';
if (mysql_query($sql, $link))
echo "База данных успешно создана!!!\n";
else
echo 'Ошибка создания базы данных: ' . mysql_error() . "\n";
//выбор базы данных
mysql_select_db("my_db") or die('Ошибка выбора базы данных my_db!<br/>');
//Создание таблицы Clients
$sql = "CREATE TABLE Clients(C_NO INT NOT NULL AUTO_INCREMENT, C_NAME VARCHAR(30) NOT NULL, C_ADDR VARCHAR(20) NOT NULL, C_CITY VARCHAR(15) NOT NULL, C_PHONE VARCHAR(11) NOT NULL, PRIMARY KEY(C_NO));";
mysql_query($sql) or die('Ошибка создания таблицы Clients! '.mysql_error().'<br/>');
//Создание таблицы Goods
$sql = "CREATE TABLE Goods(G_NO INT NOT NULL AUTO_INCREMENT, G_DESC VARCHAR(30) NOT NULL, G_PRICE INT NOT NULL, G_QTY INT NOT NULL, PRIMARY KEY(G_NO));";
mysql_query($sql) or die('Ошибка создания таблицы Goods! '.mysql_error().'<br/>');
//Создание таблицы Orders
$sql = "CREATE TABLE Orders(O_NO INT NOT NULL AUTO_INCREMENT, O_DATE DATE NOT NULL, C_NO INT NOT NULL, G_NO INT NOT NULL, O_QTY INT NOT NULL, O_AMT INT NOT NULL, PRIMARY KEY(O_NO));";
mysql_query($sql) or die('Ошибка создания таблицы Orders! '.mysql_error().'<br/>');
mysql_close($link);
?>
//----------------------------
base_table.php: //скрипт внесения данных в таблицы
<?php
//соединение с сервером
$Host = "localhost";
$User = "root";
$Password = "";
$link = mysql_connect($Host, $User, $Password);
if (!$link)
die('Нельзя соединиться с сервером: ' . mysql_error());
//выбор базы данных
mysql_select_db("my_db") or die('Ошибка выбора БД my_db!<br/>');
//заполнение таблицы Clients
$sql[0]="INSERT INTO Clients VALUES(1, 'Джуматаев М.', 'ул. Масанчи', 'Алматы', '2606382')";
$sql[1]="INSERT INTO Clients VALUES(2,'Кокорин В.', 'ул. Держинского','Алматы','
$sql[2]="INSERT INTO Clients VALUES(3,'Куимов А.', 'ул. Саина','Алматы','2248956')";
$sql[3]="INSERT INTO Clients VALUES(4,'Уразбаева Г.', 'мкр-н 5','Алматы','2771845')";
$sql[4]="INSERT INTO Clients VALUES(5,'Тусеев А.', 'ул. Джандосова','Алматы','2857689'
for($i=0; $i<=4; $i++)
mysql_query($sql[$i]) or die('Ошибка записи в таблицу Clients! '.mysql_error().'<br/>');
//заполнение таблицы Goods
$G_sql[0]="INSERT INTO Goods VALUES(1, 'Мука', '110', '10000')";
$G_sql[1]="INSERT INTO Goods VALUES(2,'Макароны', '150', '4500')";
$G_sql[2]="INSERT INTO Goods VALUES(3,'Сахар', '200','10000')";
$G_sql[3]="INSERT INTO Goods VALUES(4,'Чай', '245', '3000')";
$G_sql[4]="INSERT INTO Goods VALUES(5,'Пшено', '120','4000')";
for($i=0; $i<=4; $i++)
mysql_query($G_sql[$i]) or die('Ошибка записи в таблицу Goods! '.mysql_error().'<br/>');
//заполнение таблицы Orders
$O_sql[0]="INSERT INTO Orders VALUES(1, '10.01.01', '1', '5', '20', '2400')";
$O_sql[1]="INSERT INTO Orders VALUES(2,'10.02.03', '2', '4', '10', '2450')";
$O_sql[2]="INSERT INTO Orders VALUES(3,'10.12.06', '3', '3', '15', '3000')";
$O_sql[3]="INSERT INTO Orders VALUES(4,'10.11.12', '4', '2', '10', '1500')";
$O_sql[4]="INSERT INTO Orders VALUES(5,'10.12.12', '5', '1', '25', '2750')";
for($i=0; $i<=4; $i++)
mysql_query($O_sql[$i]) or die('Ошибка записи в таблицу Goods! '.mysql_error().'<br/>');
mysql_close($link);
echo "Данные программно записаны!!!";
?>
//----------------------------
base_form.php: // скрипт обработки запроса просмотра данных из таблиц
<Head>
<title>Курсовой проект</title>
</Head>
<?php
$Host = "localhost";
$User = "root";
$Password = "";
//соединение с сервером
$link = mysql_connect($Host, $User, $Password) or die('Ошибка подключения к БД!<br/>');
mysql_select_db("my_db") or die('Ошибка выбора БД!<br/>');
?>
<body>
<?php
//выбираем данные из таблицы Clients
$sql = "SELECT * FROM Clients";
$result = mysql_query($sql) or die('Ошибка запроса! '.mysql_error().'<br/>');
echo "<h3>Клиенты</h3>";
echo "<table border=\"1\"
cellspacing=\"0\"><tr><th>
//формирование строки из набора данных результата запроса $sql в виде массива проиндексированного номерами и именами полей
while($mas = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>".$mas['C_NO']."</td>";
echo "<td>".$mas['C_NAME']."</td>";
echo "<td>".$mas['C_ADDR']."</td>";
echo "<td>".$mas['C_CITY']."</td>";
echo "<td>".$mas['C_PHONE']."</td>"
echo "</tr>";
}
echo "</table><br>";
$sql = "SELECT * FROM Goods";
$result = mysql_query($sql) or die('Ошибка запроса! '.mysql_error().'<br/>');
echo "<h3>Товары</h3>";
echo "<table border=\"1\"
cellspacing=\"0\"><tr><th>
while($mas = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>".$mas['G_NO']."</td>";
echo "<td>".$mas['G_DESC']."</td>";
echo "<td>".$mas['G_PRICE']."</td>"
echo "<td>".$mas['G_QTY']."</td>";
echo "</tr>";
}
echo "</table><br>";
$sql = "SELECT * FROM Orders";
$result = mysql_query($sql) or die('Ошибка запроса! '.mysql_error().'<br/>');