Основы web-программирования: Работа с базой данных MySQL в языке PHP
Все приведенные в лекции запросы вы можете опробовать на учебной базе данных, размещенной по адресу mysql.tu2.ru. Информация для входа:
Пользователь: learnsql8Подробнее о работе с учебной базой данных читайте в статье Как правильно работать с учебной базой данных |
Ключевые слова: программирование, язык программирования, базы данных, MySQL, SQL, запрос, таблица, лекции по программированию, переменная, объект, PHP, SELECT, INSERT, UPDATE, DELETE, mysql_connect, mysql_pconnect, mysql_select_db, mysql_query, mysql_fetch_object
Автор: Приходько Максим Александрович
Для понимания принципа работы с базой данных в языке PHP требуется знание нескольких базовых концепций web-программирования и баз данных. И первые из них: запрос и курсор. Как мы уже говорили в лекции Базы данных: Моделируем работу blog'а - таблица пользователей, основные операции по манипуляции данными осуществляются с помощью всего 4 (четырех) команд языка SQL - INSERT, DELETE, UPDATE и SELECT. И если первые три из них "просто отрабатывают", не возвращая в результате своей работы никаких сведений из базы данных, то результатом работы корректно составленного оператора SELECT (т. е. не вызывающего при его выполнении ошибку) является временная таблица, которую обычно называют результат выборки или просто выборка.
Выборка из базы данных - это таблица, составленная в общем случае из столбцов и строк разных таблиц согласно правилам, описанным при составлении запроса. Работая с выборкой, пользователь никогда не работает с таблицей целиком. В каждый конкретный момент времени для извлечения данных доступна единственная строка выборки.
Строка, с которой в данный момент возможна работа, определяется положением курсора - указателя текущей строки выборки. В самом начале сразу после выполнения запроса курсор указывает на "мнимую" строчку перед первой строкой выборки:
Таким образом, непосредственное обращение к выбранным данным возможно только после выполнения специальной операции перехода к следующей строке, с помощью которой и осуществляется "проход" по выбранным данным:
Последовательное выполнение операции перехода к следующей строке необходимое число раз позволяет установить курсор на необходимую строчку выборки и обратиться к требуемым данным. Например, для обращения к третьей строке выборки требуется выполнение трех операций перехода к следующей строке:
В приведенном примере выборка содержит 10 строк. После выполнения 10 операций перехода к следующей строке курсор окажется на последней - 10-й строке:
Тогда одиннадцатое (11-е) выполнение команды перехода к следующей строке приведет к "установке" курсора на "мнимую" строчку после последней строки выборки, в результате чего сервер базы данных сообщит приложению о том, что результаты выборки исчерпаны, а их перебор можно завершать:
Возможность определения конца выборки (так же как и файла, например) позволяет обрабатывать выборку с применением бесконечного цикла, так как использование конечного цикла в общем случае невозможно, а для возможности использования конечного цикла необходимо иметь механизмы для определения точного числа строк выборки.
Обратите внимание, возможны ситуации, когда выборка оказывается пустой, то есть не содержит ни одной строки данных. В этом случае самое первое выполнение операции перехода к следующей строке вызывает прекращение обработки результатов выборки и не вызывает ошибки. Все вместе это позволяет организовать унифицированный механизм выполнения запросов и обработки их результатов.
Две другие ключевые концепции относятся не только и не столько непосредственно к языку программирования PHP, сколько к прогрммированию вообще: переменная и объект. Мы не будем подробно останавливаться на них, скажем лишь несколько общих слов.
Переменная - это "поименованная" область памяти, хранящая некоторое значение. "Поименованная" означает, что у нее есть имя, используя которое и осуществляется доступ к значению и манипулирование им. Сделано это для удобства, так как использовать шестнадцатеричные адреса памяти, мягко говоря, неудобно.
В языке PHP присутствует яркая специфика работы с переменными - их не требуется определять и у них нет формально выраженного типа данных. Это означает, что "ввести" переменную в программу можно в любом ее месте, при этом не требуется указывать тип данных значения, которое предполагается хранить в переменной, а само "определение" переменной заключается в указании символа $ перед ее именем:
$x = 5Объект в свою очередь можно назвать следующей эволюцией понятия переменная. Объект объединяет в единое целое набор переменных, функций и описаний реакций объекта "на внешние раздражители".
При работе с базой данных MySQL в языке программирования PHP используется ряд спецальных объектов. В настоящий момент достаточно сказать, что доступ к переменной или функции объекта осуществляется указанием имени объекта, символов -> и имени переменной (функции):
$object->idНепосредственное обращение к базе данных в любом языке программирования выглядит примерно одинаково (с логической точки зрения) и осуществляется последовательным выполнением следующих операций:
- подключение к серверу базы данных (СУБД)
- подключение к конкретной базе данных
- выполнение запроса
- обработка результатов запроса
$connection = @mysql_pconnect("localhost", "имя_пользователя_СУБД", "пароль_СУБД");В качестве параметров, как видно из примера, передаются имя хоста (обычно localhost), имя пользователя для подключения к серверу базы данных, пароль. Результатом работы функции является объект указатель на соединение с MySQL или FALSE (в случае ошибки). В дальнейшем этот объект будет использован для подключения к конкретной базе данных.
Подключения к конкретной базе данных осуществляется с помощью функции mysql_select_db:
@mysql_select_db("имя_базы_данных", $connection)В качестве параметров функции передаются имя базы данных и ранее полученный объект подключение к MySQL.
Выполнение запроса осуществляется с помощью функции mysql_query:
$query = @mysql_query($sql_insert);В качестве параметра этой функции передается только текст запроса (на языке SQL). Запрос, соответственно, выполняется на той базе данных, которая выбрана активной на предыдущем этапе. Только для запроса select функция возвращает объект указатель на результат запроса в случае успешного выполнения или FALSE в случае ошибки. Для всех остальных запросов функция возвращает TRUE в случае успеха или FALSE в случае ошибки.
Таким образом, обработка результатов запроса необходима только в случае запроса select. Для этого используется функция перехода к следующей строке mysql_fetch_object, которая возвращает объект, переменные которого соответствуют столбцам строки, в случае успеха или FALSE в случае ошибки. За счет этого становится возможным вызов функции в бесконечном цикле (для обработки всех строк выборки):
while($object = @mysql_fetch_object($query))В нашем примере доступ к столбцу id текущей строки осуществляется с использованием оператора ->:{
# команды для обработки строки
}
$object->idА в целом работа с базой данных осуществляется следующим образом:
<?php
$connection = @mysql_pconnect("localhost", "имя_пользователя_СУБД", "пароль_СУБД");
if(!$connection)
echo "Ошибка подключения к серверу базы данных!<br />";
else
echo "Подключение к серверу базы данных установлено<br />";
if(!@mysql_select_db("имя_базы_данных", $connection))
echo "Ошибка подключения к базе данных!<br />";
else
echo "Подключение к базе данных установлено<br />";
unset($query);
$sql_select = "select * from members ";
$sql_insert = "insert into members (id, username, signature) values('', 'temp_user_000', 'temp_user_000') ";
if($connection)
{
$query = @mysql_query($sql_insert);
if(!query)
echo "Ошибка выполнения запроса!<br />";
else
echo "Запрос успешно выполнен<br />";
}
# фрагмент кода для обработки результатов выполнения команды select
# не требуется для команд insert, update, delete
while($object = @mysql_fetch_object($query))
{
echo $object->id."<br />";
}
?>
Вы можете свободно использовать данный скрипт (исходный файл можно скачать ниже). Убедительная просьба: оставьте в исходном файле комментарии, указывающие авторство. При перепечатке кодов или фрагментов статьи, пожалуйста, указывайте ссылку на оригинал статьи: http://www.argusm.com/article.php?id=179. В случае возникновения вопросов или комментариев к описанному скрипту свяжитесь с автором, воспользовавшись одним из Контактов.
Добавить комментарий