FoxWeb

софт для студентов
Искать здесь

Работа с MySQL в PHP: подробно

Раздел: PHP, MySQL, веб-программирование Автор: fox++
E-mail: спаму - нет! Www: http://foxweb.net.ru
Просмотров: 4118 Дата: 21.12.2005
Это руководство является логическим продолжением статьи "Работа с MySQL в PHP: с чего начать?". Здесь более подробно описано применение функций PHP для работы с MySQL.

(Будем считать, что вы уже прочитали статью "Работа с MySQL в PHP: с чего начать?" и готовы к решению более сложных задач.)

Всё больше интерактивных сайтов требуют отображения динамической информации на основе данных, полученных от пользователя. Например, покупателю необходимо иметь полный отчёт по своим покупкам на в интерне-магазине. В этом случае на сайте должны хранить два типа данных, доступных для покупателя - отчёт по заходам в магазин и отчёт по купленным товарам. Эти данные можно хранить двумя способами - в обычных тесктовых файлах и в базе данных.

Текстовые файлы применяются для хранения информации всё реже и реже, и на это есть три главных недостатка:

  1. Невозможность индексировать данные. Чтобы это стало возможным, теоретически необходимо последовательно считать ВСЕ записи из файла. Это главная проблема. Она заключается в том, что время поиска (индексирования) прямопропорционально объёму хранящихся в текстовом файле данных.
  2. Невозможность эффективного метода разделения доступа различных пользователей к данным.
  3. В большистве случаев это неэффективное использование носителя. Обычно текстовые файлы не могут быть зашифрованы и сжаты, см.

Альтернатива, которая по моему мнению, является единственным применимым методом - это базы данных. Одна из наиболее популярных СУБД, используемых в интернете - это MySQL. Данные, сохранённые в БД легко индексируются, и управляются и хранятся очень эффективно. Кроме того, большинство СУБД предоставляют администратору расширенные средства управления базами данных, например такие как утилиты архивирования, восстановления, контроля и обслуживания.

Веб-сайты, написанные с использованием PHP довольно легко объединяются с MySQL. Это возможно благодаря тому, что PHP содержит стандартную библиотеку функций для работы с MySQL. PHP также может работать с MySQL посредство стандартного интерфейса ODBC для MySQL (существует драйвер MySQL ODBC), но гораздо эффективнее работа без лишних "прослоек" через стандартный модуль.

Остальная часть этой статьи является руководством о том, как:

  1. Соединиться с сервером MySQL.
  2. Выполнить SQL-запросы к БД.
  3. Соединение с MySQL

Прежде, чем написанный вами скрипт, будет запрашивать, добавлять или обновлять информацию в БД, он должен выполнить соединение с сервером БД, чтобы все эти действия стали доступными.

Функции mysql_connect() и mysql_select_db() как раз предназначены для этой цели. В аргументах первой функции укажите по порядку: имя сервера MySQL, логин БД и пароль БД. После выполнения соединения необходимо выбрать базу данных, с которой мы будем работать.

Следующие две строки кода демонстрируют соединение с сервером и выбор БД:

@mysql_connect("[servername]", "[username]", "[password]") or die("Cannot connect to DB!");
@mysql_select_db("[databasename]") or die("Cannot select DB!");

Оператор @ был использован для того, чтобы подавить стандартные сообщения о возможных ошибках функций mysql_connect() и mysql_select_db(). Вместо них в случае ошибки функция die() остановит выполнение скрипта и выведет произвольное сообщение. Применение операторв @ и функции die() необязательно, но считается хорошим тоном, а остановка работы скрипта не позволит злоумышенникам подсмотреть служебную информацию в сообщения об ошибках.

Выполнение запросов к БД MySQL

Как только соединение и выбор БД будут выполнены, PHP-скрипт может выполнять операции над данными из БД посредством стандартных SQL-запросов. Функция mysql_query() используется для выполнения запросов к БД. В следующем примере PHP-скрипт выполняет запрос к таблице "tbl_login" для того, чтобы определить, если в этой таблице запись "пользователь/пароль" (для проверки подлинности пользователя).

Примечание:
Предполагается, что таблица "tbl_login" содержит три поля - login (тип VARCHAR - имя пользователя), password (тип VARCHAR - пароль), last_logged_in (тип DATETIME - дата последнего входа).

<?php

// переменные $username и $passwd должны быть переданы из формы 
// методом POST. для примера запишем их прямо здесь.
$username "john";
$passwd "mypassword";

// генерируем SQL-запрос, который выберет записи с заданными значениями $username и $passwd.
$sql "SELECT * FROM tbl_login WHERE login = '".$username."' AND password = '".$passwd."'"// SQL-запрос выполняется для текущей БД.
// результат выполнения записывается в переменную $r.
$r mysql_query($sql);

// после выполнения mysql_query() перменная $r будет содержать полученные данные 
if (!$r) {
$err mysql_error();
print 
$err;
exit();
}

// эта часть скрипта проверяет наличие в таблице записи с заданными
// значениями $username и $passwd, функция mysql_affected_rows()
// mysql_affected_rows() возвращает количество записей, возвращённых последним запросом 
// соответственно, если mysql_affected_rows()==0, то такой записи нет. 
if (mysql_affected_rows() == 0) {
print 
"Логин/пароль не верны. Попробуйте ещё раз.";
}
else {
// если запись найдена, то покажем пользователю время последнего входа $last
$row mysql_fetch_array($r);
$last $row["last_logged_in"];
print 
"Вы успешно авторизовались. Ваш послений вход был ".$last.".";
}

?> 

Этот пример демонстрирует работу запроса SELECT языка SQL. Точно таким же способом выполняются другие виды запросов, например UPDATE, INSERT, DELETE и другие, используя функции mysql_query() and mysql_affected_rows().

This PHP scripting article is written by John L. John L is the Webmaster of The Ultimate BMW Blog! (http://www.bimmercenter.com).
The Ultimate BMW Blog!
">
Written by: John L

Оригинал руководства: http://www.beginnersphp.co.uk/MySQL-Database-Handling-in-PHP.php. Перевод: fox++.

Комментарии

nobody 24.08.2007 09:54:24 #
Уязвимость SQL injection в примере.

Оставить комментарий

Ваше имя

Ваш комментарий

Код   Защитный код. Если вы не видите здесь рисунок - обновите страницу.
Оценка   

Заметки по этой теме