Безопасная работа с бд mysql. Поддержка баз данных в PHP. Удаление записей из БД
Свою базу я назвал "phptest". После нажатие на кнопку "Создать" Вас автоматом должно перекинуть в созданную Вами базу данных.
Создаем таблицу в базе данных
В этой процедуре тоже ничего сложного нет. Давайте создадим таблицу в которой мы будем хранить заголовок наших статей и непосредственно сам текст:
Как Вы могли заметить в количестве полей я поставил цифру 3, почему? Ведь нам нужно создать два поля, под заголовок и текст. Дело в том, что у таблицы в базе данных должно быть одно дополнительное поле. Для чего? Это поле представляет собой поочередный идентификационный номер, (то есть мы как бы считаем наши строки в таблице) таким образом мы получаем у каждой строчки таблицы свой неповторимый номер. Это пригодится для поиска нужной нам строки в базе данных. Поле это обычно называют id и выставляют ему AUTO_INCREMENT (покажу ниже где он выставляется). AUTO_INCREMENT позволяет присваивать каждой сточки свой неповторимый номер, тем самым Вы в таблице базы данных не встретите запись с одинаковым номером!
после заполнение имени и количество полей, жмет "ОК" попадаем на страницу создание полей. Признаюсь Вам я не особо понимаю что делаю при создание полей, но мне это не мешает с ними работать Заполним вот так:
И заполните два нужных нам поля:
Почему только два? Потому что первое поле id будет заполняться автоматически за счет AUTO_INCREMENT. Жмем "ОК". Теперь во вкладке "Обзор" можно увидеть созданную нами строчку в таблице:
Что ж, мы научились создавать таблицы и строки через панель phpmyadmin, это уже прогресс Кстати хочу отметить что интерфейс у этой панели интуитивно понятен, Вы вполне можете потыкать там кнопочки и разобраться что к чему
Пришло время научится создавать удалять и обновлять строки в созданных таблицах посредством php. Для того что бы Вы лучше восприняли то что я Вам говорю, будем писать небольшую админскую панель сайта, и походу дела я Вам расскажу что да как.
Вывод записей из базы данных
Начнем с этого, так как при создание какого либо проекта необходимо наглядно видеть процесс, а без вывода это очень сложно сделать (я буду работать с файлом test.php, не удивляйтесь когда увидите ссылки в коде на этот файл). Как будем выводить? Ну для начала нам необходимо подключиться к базе данных, после циклом do while (Изучаем PHP - Циклы) мы вытащим записи из базы данных. Приступим
Подключение к базе данных
Как осуществляется подключение? Внимание на синтаксис:
mysql_select_db(Название БД, mysql_connect(Сервер,Имя пользователя БД,Пароль пользователя БД));
Название базы данных, сервер пользователь и пароль создается Вами или предоставляется Вашим хостером. На примере локального сервера, вы создаете некоторые данные самостоятельно, или же пользуетесь уже созданными. Вот как будет выглядеть подключения к созданной мной базе данных:
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
Сервер, пользователь и пароль был создан по умолчанию (в данном случае можно сказать, что почти все данные нам предоставляет хостер). Из своих данных я лишь указал имя базы данных. Кстати, это php код, и поэтому должен находиться в спец скобках ()
Вывод данных
Нам необходимо вывести данные из таблицы page. Внимание на синтаксис вывода:
$result = mysql_query("SELECT Что вытаскиваем FROM имя таблицы в БД");
Первая строчка позволяет указать какие колонки нам необходимо вытащить, и из какой базы данных.
Вторая строчка помещает все найденное в переменную...
ВНИМАНИЕ есть пару моментов которые я бы хотел пояснить. Давайте решим несколько задач:
- Нам необходимо вытащить все поля из таблицы.
Как вытащить все поля из таблицы page? вот так:
$result = mysql_query("SELECT * FROM page");
$myrow = mysql_fetch_array($result);
Вы могли заметить, что я поставил звездочку (*) после SELECT. Звездочка означает, что мне необходимо извлечь все поля из таблицы
- Нам необходимо вытащить только одно поле из таблицы
Как вытащить только поле text из таблицы? вот так:
$result = mysql_query("SELECT text FROM page");
$myrow = mysql_fetch_array($result);
Для того что бы вытащить не все поля, а только некоторые, необходимо после SELECT через запятую перечислить необходимые поля.
- Нам необходимо вытащить поля не из все таблицы, а только из одной строчки
Как вытащить все поля из первой строчки? Нам известно что первая строчка имеет id равную единице, воспользуемся этими знаниями:
После SELECT я через запятую пояснил какие поля необходимо извлечь, после добавил новую строчку WHERE (что означает "где") id равен 1. Таким образом я вытаскиваю нужные мне поля из строки где id равен единице
Ну что ж, приступим к созданию вывода наших статей? Выводить будем только заголовки, приступим:
$myrow = mysql_fetch_array($result);
do
{
echo "".$myrow."
";
}
Что мы сделали? Мы вытащили из таблицы два поля, id и title. Далее запустили цикл do while (Изучаем PHP - Циклы) и сформировали ссылки, с помощью данных которые вывели из БД. Данные хранятся в переменной $myrow, эта переменная является массивом , ключами к массиву являются имена наших полей в базе данных. Вот что получилось:
Вывод заголовков есть, теперь давайте организуем вывод полных сообщений при щелчке мыши по ссылке с заголовком. Для того что бы это осуществить в одном файле, добавим условия if(){}:
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "phptest";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET["id"]))
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);
do
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));
}
//ВЫВОД ЗАГОЛОВКОВ
//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET["id"]))
{
$myrow = mysql_fetch_array($result);
echo $myrow;
}
//ВЫВОД ПОЛНОГО ТЕКСТА
?>
Я добавил два условия. Список с заголовками мы будем видеть только в случае если не существует глобальная переменная $_GET["id"]. Полный же текст мы увидим только если эта переменная существует. При этом из базы данных мы будем выводить лишь одну нужную нам запись. Вот, что мы получили:
Теперь думаю пора научится добавлять новые строки в таблицу.
Добавление данных в БД
Добавление начнем с создание формы , вот кусочек кода который необходимо добавить в конец нашего файла:
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET["add"]))
{
echo "
}
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
Эта форма появиться только в случае если будет существовать глобальная переменная $_GET["add"], поэтому где-нить в низу необходимо вставить ссылку на добавление новой статьи. Лучше всего это сделать в коде вывода заголовков, так же можно отредактировать условие вывода наших заголовков вот так:
//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET["id"]) AND !isset($_GET["add"]))
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);
do
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));
echo "
Добавить пост";
}
//ВЫВОД ЗАГОЛОВКОВ
Отредактировал условие таким образом, что бы список заголовков не появлялся при выводе формы, вот что получилось:
$result = mysql_query("INSERT INTO имя таблицы в БД (поле 1 БД,поле 2 БД) VALUES ("данные 1","данные 2")");
Сейчас напишем обработчик для нашей мини админки и вы все поймете . Вот кусочек кода, который я разместил сразу после подключение к базе данных:
//ДОБАВЛЕНИЕ ЗАПИСЕЙ
{
header("location: test.php");
exit;
}
//ДОБАВЛЕНИЕ ЗАПИСЕЙ
Условием является глобальная переменная $_POST то есть если мы заполнили форму, нажали на кнопку "Добавить пост" то сработает наше условие. В поле title запишутся данные из глобальной переменной $_POST, а в поле text - $_POST. Далее сработает строчка header("location: test.php") Она позволяет перенаправить пользователя на другую страницу, в данном случае этой страницей будет test.php. А строчка exit; прерывает выполнение остальных скриптов. Вот что получилось:
Редактирование данных в БД
Для того что бы редактировать определенную запись в нашей БД нам естественно необходимо определить какую именно запись необходимо отредактировать...Я предлагаю выводить кнопку редактирование в коде вывода полного текста, давайте отредактируем его:
//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET["id"]))
{
$result = mysql_query("SELECT text FROM page WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);
echo $myrow;
echo "
Редактировать пост";
}
//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET["edd"]))
{
$myrow = mysql_fetch_array($result);
Echo "
}
//ФОРМА РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
Я добавил этот кусочек кода после формы добавление записей. Эта форма почти аналогична форме добавление постов. Как Вы могли заметить, я переделал атрибуты name, и добавил атрибут value. В этот атрибут я поместил данные которые вывел из базы данных. Так же тут присутствует невидимое поле. Оно нужно для того чтобы переслать идентификатор записи в файл обработчик.
Теперь для того что бы при выводе этой формы на экране не было списка заголовков, исправим условие:
//ВЫВОД ЗАГОЛОВКОВ
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);
do
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));
echo "
Добавить пост";
}
//ВЫВОД ЗАГОЛОВКОВ
Пришло время узнать как редактируются записи в базе данных. Вот синтаксис:
Теперь напишем обработчик. Вот кусочек кода который я добавил сразу после обработчика добавление записей:
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
{
header("location: test.php");
exit;
}
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
По условию видно, что обработчик запустится только в случае если мы нажали на кнопку "редактировать пост". Далее идет обновление базы данных. В поле title мы поместим значение глобальной переменной $_POST а в поле text - $_POST. Редактировать будем строку у которой id равен глобальной переменной $_POST. После мы перенаправляем пользователя обратно к списку заголовков:
Удаление записей из БД
Ну что ж, последнее что осталось нам изучить, это удаление.. Оно проще всех остальных, так что внимание на синтаксис:
Для того чтобы удалять какие то записи, необходимо где-нить выставить ссылку с помощью который пользователь сможет удалить какую то запись...давайте разместим эту ссылку в выводе полного текста поста:
//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET["id"]))
{
$result = mysql_query("SELECT text FROM page WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);
echo $myrow;
echo "
Редактировать пост";
echo "
Удалить пост";
}
//ВЫВОД ПОЛНОГО ТЕКСТА
Результат работы
Вот полный код сегодняшнего поста:
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "phptest";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
//ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_POST["title_post"]) AND isset($_POST["text_post"]))
{
$result = mysql_query("INSERT INTO page (title,text) VALUES ("$_POST","$_POST")");
header("location: test.php");
exit;
}
//ДОБАВЛЕНИЕ ЗАПИСЕЙ
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
if(isset($_POST["title_post_edd"]) AND isset($_POST["text_post_edd"]))
{
$result = mysql_query ("UPDATE page SET title="$_POST", text="$_POST" WHERE id="$_POST"");
header("location: test.php");
exit;
}
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
//УДАЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET["del"]))
{
$result = mysql_query ("DELETE FROM page WHERE id="$_GET"");
header("location: test.php");
exit;
}
//УДАЛЕНИЕ ЗАПИСЕЙ
//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET["id"]) AND !isset($_GET["add"]) AND !isset($_GET["edd"]))
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);
do
{
echo "".$myrow."
";
}
while ($myrow = mysql_fetch_array($result));
echo "
Добавить пост";
}
//ВЫВОД ЗАГОЛОВКОВ
//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET["id"]))
{
$result = mysql_query("SELECT text FROM page WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);
echo $myrow;
echo "
Редактировать пост";
echo "
Удалить пост";
}
//ВЫВОД ПОЛНОГО ТЕКСТА
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET["add"]))
{
echo "
}
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
//ФОРМА РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
if(isset($_GET["edd"]))
{
$result = mysql_query("SELECT * FROM page WHERE id="$_GET"");
$myrow = mysql_fetch_array($result);
Echo "
}
//ФОРМА РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
?>
Заключение
Довольно сложный получился материал. Но! Вы могли заметить, что я использовал лишь ту информацию которую давал ранее . А это значит, что имея эти знание, можно создавать простейшие проекты на php! Если Вы все это освоили, то можете с гордостью заявить, что вы начинающий программист! Ну что ж, теперь Вы вполне можете приступить к созданию свой первой cms . Если есть какие то вопросы, а они скорее всего есть, задавайте, помогу чем смогу! Удачи Вам, на сегодня у меня все!
P.S.: Что такое mdf файл? Чем его открыть? Как его открыть? На эти и многие вопросы можно найти ответ на voprosi4ek.ru
В данной статье мы рассмотрим способы обращения к таблицам баз данный MySQL с помощью языка запросов SQL. SQL - это аббревиатура, которая так и "раскрывается" - структуризированный язык запросов.
В языке PHP для это цели существует целый ряд функций с префиксом "mysql". Нам для рассмотрения запросов понадобится не так много из них. Функция, без которой в языке PHP выполнение SQL-запросов было бы просто невозможным:
Resource mysql_query(запрос)
Данная функция посылает запрос к базе данных и возвращает в случае успешного обращения идентификатор ресурса.
Для того чтобы подключиться к базе данных MySQL необходимо выполнить следующую последовательность:
$host="localhost"; // имя хоста (уточняется у провайдера) $database="db_name"; // имя базы данных, которую вы должны создать $user="user_name"; // заданное вами имя пользователя, либо определенное провайдером $pswd="your_pass"; // заданный вами пароль $dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL."); mysql_select_db($database) or die("Не могу подключиться к базе.");
Итак mysql_connect()
- функция для подключения к серверу MySQL на Вашем хостинге.
А mysql_select_db()
выбирает базу данных на сервере для подключения.
Иными словами подключаемся к серверу, выбираем базу и начинаем работать.
Функция die() вызывается в случае ошибки и выводит в окно браузера сообщение, которое вы указали.
Для завершения работы с базами данных используется функция:
Mysql_close($dbh);
Здесь $dbh
- дескриптор, которые при соединении возвратила функция mysql_connect
.
Закончив стартовый обзор, начнем рассмотрение собственно SQL-запросов.
Для этого прежде всего вам необходимо создать базу данных с определенном именем. А в ней создать таблицу, тоже с конкретным именем. В наших примерах будем обращаться к таблице my_sql_table
. Чтобы создать эту таблицу давайте выполним в phpmyadmin нашего localhost следующий запрос:
CREATE TABLE `my_sql_table` (`id` INT NOT NULL , // идентификатор будущих записей таблицы `firstname` VARCHAR(50) NOT NULL , // текстовое поле VARCHAR `surname` VARCHAR(50) NOT NULL , // max длиной 50 символов PRIMARY KEY (`id`) // первичный ключ - идентификатор id);
Итак таблица создана. Выполним первый запрос, который сразу оформим в виде PHP-кода:
\n";
echo "Имя: ".$row["firstname"]."
\n";
echo "Фамилия: ".$row["surname"]."
\n"; } ?>
Разберем PHP-код файла firstsql.php . Начнем с собственно запроса к таблицам базы данных (БД).
$query = "SELECT * FROM `my_sql_table`";
Данный запрос можно расшифровать так: выбрать из таблицы my_sql_table БД все записи из всех полей. Таким образом знак * после слова SELECT означает "выбрать абсолютно все". Итак, запрос сформирован. Теперь его надо выполнить:
$res = mysql_query($query);
В случае успешного выполнения запроса функция mysql_query()
вернет нам идентификатор ресурса $res
.
Его мы должны передать в качестве параметра в функцию mysql_fetch_array()
. Название этой функции говорит само за себя. Т.е. она формирует и выдает массив по выборке из таблицы БД. В случае нашей таблицы массив будет состоять из числа элементов, равных количествам записей (строк) в таблице и содержать значения id, firstname, surname
для каждой строки таблицы. Следовательно, следующий код:
While($row = mysql_fetch_array($res))
{
echo "Номер: ".$row["id"]."
\n";
echo "Имя:".$row["firstname"]."
\n";
echo "Фамилия:".$row["surname"]."
\n"; }
можно прокомментировать так: пока введенная нами переменная $row получает не нулевые результаты работы функции mysql_fetch_row
следует выдать в броузер значение полей $row["id"], $row["firstname"], $row["surname"]
с помощью echo
.
Если запрос выполнить так:
$query = "SELECT firstname FROM `my_sql_table`";
то это будет означать, что из всех строк выбирается только значения поля firstname.
Следовательно предыдущий код следует переписать как:
$res = mysql_query($query);
while($row = mysql_fetch_array($res))
{
echo "Имя:".$row["firstname"]."
\n";
}
Если Вы хотите выбрать строки таблицы с конкретным значением id где фамилия (surname) будет Петров , то запрос перепишется следующим образом:
$query = "SELECT id FROM `my_sql_table` where surname="Петров"";
А вот если потребуется узнать фамилию того, кто находится под номером, к примеру, 5, то запрос будет таким:
$query = "SELECT surname FROM `my_sql_table` where id=5";
В этом случае Вы знаете, что результатом запроса будет всего одна строка из таблицы. Т.е. нет смысла организовывать цикл с использованием while . И обработка запроса будет следующей
$res = mysql_query($query); $row = mysql_fetch_row($res); echo "Фамилия пятого человека в списке: ".$row."\n";
Здесь вместо mysql_fetch_array() мы применили mysql_fetch_row() . Т.е. получить значение поля (или полей) конкретной строки. Поскольку поле у нас было одно - surname - мы можем обратиться к единственному элементу массива $row как $row; .
Итак, рассмотрим наиболее типичные примеры запросов MySQL. Рассмотрение проведем на базе таблицы my_sql_table
:
1. Добавим в таблицу my_sql_table поле middle_name (отчество) после surname
:
$query = "ALTER TABLE `my_sql_table` ADD `middle_name`
VARCHAR(50) NOT NULL AFTER `surname`";
2. Теперь удалим поле surname из таблицы my_sql_table:
$query = "ALTER TABLE `my_sql_table` DROP `surname`";
3. Удаляем записи из таблицы my_sql_table с фамилией Сидоров:
$query = "DELETE FROM `my_sql_table` where surname="Сидоров"";
4. Помимо знаков равенства, также "больше" или "меньше", в языке MySQL запросов существует понятие "похоже на ". Выберем записи из таблицы my_sql_table, где в фамилии встречается "дор " :
$query = "SELECT * FROM `my_sql_table` where surname like "%дор%"";
Здесь наличие "%
" в начале и конце "дор" и означает, что запрос будет искать именно "дор", причем не важно в начале, конце, или середине фамилии он находится. Рассмотрим следующий пример
5. Выберем записи из таблицы my_sql_table с фамилией, которая начинается на П
. Обратите внимание на расположение "%
":
$query = "SELECT * FROM `my_sql_table` where surname like "П%"";
6. Вычислим максимальное значение id :
$query = "SELECT MAX(id) FROM `my_sql_table`";
7. Вычислим количество полей в my_sql_table с фамилией, которая начинается на П .
$query = "SELECT COUNT(*) FROM `my_sql_table` where surname like "П%"";
8. Удаление таблицы my_sql_table:
$query = "DROP TABLE `my_sql_table`";
Для запросов 1-3 на языке PHP достаточно просто выполнить запрос:
Mysql_query($query);
Мы рассмотрели наиболее характерные примеры запросов. Полагаю, с их помощью, следуя элементарной логике, Вы сможете выполнять более сложные запросы к созданным Вами таблицам баз данных MySQL.
Есть еще вопросы или что-то непонятно - добро пожаловать на наш | |
|
Средства эффективного хранения и выборки больших объемов информации внесли огромный вклад в успешное развитие Интернета. Обычно для хранения информации используются базы данных. Работа таких известных сайтов, как Yahoo, Amazon и Ebay, в значительной степени зависит от надежности баз данных, хранящих громадные объемы информации. Конечно, поддержка баз данных ориентирована не только на интересы гигантских корпораций -- в распоряжении web-программистов имеется несколько мощных реализаций баз данных, распространяемых по относительно низкой цене (а то и бесплатно).
Правильная организация базы данных обеспечивает более быстрые и гибкие возможности выборки данных. Она существенно упрощает реализацию средств поиска и сортировки, а проблемы прав доступа к информации решаются при помощи средств контроля за привилегиями, присутствующими во многих системах управления базами данных (СУБД). Кроме того, упрощаются процессы репликации и архивации данных.
Глава начинается с подробного описания выборки и обновления данных в MySQL -- вероятно, самой популярной СУБД, используемой в PHP (http://www.mysql.com). На примере MySQL будет показано, как в PHP происходят загрузка и обновление данных в базе; мы рассмотрим базовые средства поиска и сортировки, используемые во многих web-приложениях. Затем мы перейдем к реализованной в PHP поддержке ODBC (Open Data Base Connectivity) -- обобщенного интерфейса, который может использоваться для одновременного соединения с разными СУБД. Поддержка ODBC в PHP будет продемонстрирована на примере соединения и выборки данных из базы данных Microsoft Access. Глава завершается проектом, в котором PHP и СУБД MySQL используются для создания иерархического каталога с информацией об избранных сайтах. При включении в каталог новых сайтов пользователь относит их к одной из стандартных категорий, определяемых администратором сайта.
Прежде чем переходить к обсуждению MySQL, я хочу сказать несколько слов об SQL -- самом распространенном языке для работы с базами данных. Язык SQL заложен в основу практически всех существующих СУБД. Чтобы перейти к рассмотрению примеров работы с базами данных, необходимо хотя бы в общих чертах представлять, как работает SQL.
Что такое SQL?
SQL обычно описывается как стандартный язык, используемый для взаимодействия с реляционными базами данных (см. ниже). Однако SQL не является языком программирования, как С, C++ или PHP. Скорее, это интерфейсное средство для выполнения различных операций с базами данных, предоставляющее в распоряжение пользователя стандартный набор команд. Возможности SQL не ограничиваются выборкой данных из базы. В SQL поддерживаются разнообразные возможности для взаимодействия с базой данных, в том числе:
- определение структуры данных
Обратите внимание: в определении SQL было сказано, что этот язык предназначен для работы с реляционными базами данных. В реляционных СУБД данные организуются в виде набора взаимосвязанных таблиц. Связи между таблицами реализуются в виде ссылок на данные других таблиц. Таблицу можно представить себе как двухмерный массив, в котором расположение каждого элемента характеризуется определенными значениями строки и столбца. Пример реляционной базы данных изображен на рис. 11.1.
Рис. 11.1. Пример реляционной базы данных
Как видно из рис. 11.1, каждая таблица состоит из строк (записей) и столбцов (полей). Каждому полю присваивается уникальное (в рамках данной таблицы) имя. Обратите внимание на связь между таблицами customer и orders, обозначенную стрелкой. В информацию о заказе включается короткий идентификатор клиента, что позволяет избежать избыточного хранения имени и прочих реквизитов клиента. В изображенной базе данных существует еще одна связь -- между таблицами orders и products. Эта связь устанавливается по полю prod_id, в котором хранится идентификатор товара, заказанного данным клиентом (определяемого полем custjd). Наличие этих связей позволяет легко ссылаться на полные данные клиента и товара по простым идентификаторам. Правильно организованная база данных превращается в мощное средство организации и эффективного хранения данных с минимальной избыточностью. Запомните эту базу данных, я буду часто ссылаться на нее в дальнейших примерах.
Итак, как же выполняются операции с реляционными базами данных? Для этого в SQL существует специальный набор общих команд -- таких, как SELECT, INSERT, UPDATE и DELETE. Например, если вам потребуется получить адрес электронной почты клиента с идентификатором 2001cu (см. рис. 11.1), достаточно выполнить следующую команду SQL:
SELECT cust_email FROM customers WHERE custjd = "2001cu"
Все вполне логично, не правда ли? В обобщенном виде команда выглядит так:
SELECT имя_поля FROM имя_таблицы [ WHERE условие ]
Квадратные скобки означают, что завершающая часть команды является необязательной. Например, для получения адресов электронной почты всех клиентов из таблицы customers достаточно выполнить следующий запрос:
SELECT cust_email FROM customers
Предположим, вы хотите включить в таблицу products новую запись. Простейшая команда вставки выглядит так:
INSERT into products VALUES ("1009pr", "Red Tomatoes", "1.43");
Если позднее эти данные потребуется удалить, воспользуйтесь следующей командой:
DELETE FROM products WHERE prod_id = 1009r";
Существует много разновидностей команд SQL, и полное их описание выходит за рамки этой книги. На эту тему вполне можно написать отдельную книгу! Я постарался сделать так, чтобы команды SQL, используемые в примерах, были относительно простыми, но достаточно реальными. В Web существует много учебной информации и ресурсов, посвященных SQL. Некоторые ссылки приведены в конце этого раздела.
Записывать команды SQL символами верхнего регистра необязательно. Впрочем, я предпочитаю именно такую запись, поскольку она помогает различать компоненты запроса.
Раз вы читаете эту книгу, вероятно, вас интересует вопрос, как же организуется работа с базами данных в среде Web? Как правило, сначала при помощи какого-
либо интерфейсного языка (PHP, Java или Perl) создается соединение с базой данных, после чего программа обращается к базе с запросами, используя стандартный набор средств. Интерфейсный язык можно рассматривать как своего рода «клей», связывающий базу данных с Web. Я перехожу к своему любимому интерфейсному языку -- PHP.
Дополнительные ресурсы
Ниже перечислены некоторые ресурсы Интернета, посвященные SQL. Они пригодятся как новичкам, так и опытным программистам.
- Учебники по SQL: http://perl.about.com/compute/perl/cs/beginningsql/index.htm .
- SQLCourse.com (с примером базы данных): http://www.sqlcourse.com .
- SQL для вундеркиндов Web: http://www.arsdigita.com/books/sql .
- Введение в SQL (применительно к MySQL): http://www.devshed.com/Server_side/MySQL/Intro .
Поддержка баз данных в PHP
Если бы мне предложили назвать самый важный аспект PHP, вероятно, я бы остановился на поддержке баз данных. В PHP реализована обширная поддержка практически всех существующих серверов баз данных, в том числе:
PostgreSQL | ||
Solid | ||
Sybase | ||
UNIX dbm | ||
File-Pro (read-only) |
Velods | |
Oracle (OCI7 и OC18) |
Как показывает этот список, поддержка баз данных в PHP простирается от совместимости с базами данных, известных всем (например, Oracle), до тех, о которых многие даже не слышали. Мораль -- если вы собираетесь использовать серьезную СУБД для хранения информации, распространяемой через Web, скорее всего, эта база данных поддерживается в PHP. Поддержка базы данных в PHP представлена набором стандартных функций для соединения с базой, обработки запросов и разрыва связи.
Подробное описание всех поддерживаемых баз данных явно выходит за рамки книги. Впрочем, сервер MySQL дает неплохое представление об общих возможностях поддержки баз данных в PHP. По этой причине в примерах оставшейся части этой и всех остальных глав книги будет использоваться синтаксис MySQL. Независимо от того, с каким сервером баз данных вы будете работать, адаптация примеров не вызовет особых сложностей.
Установка
Одна из причин популярности MySQL среди пользователей PHP заключается в том, что поддержка этого сервера автоматически включается в поставку PHP. Таким образом, вам остается лишь проследить за правильной установкой пакета MySQL СУБД MySQL совместима практически с любой серьезной операционной системой, включая FreeBSD, Solaris, UNIX, Linux и различные верии Windows. Хотя лицензионная политика MySQL отличается большей гибкостью в сравнении с другими серверами баз данных, я настоятельно рекомендую ознакомиться с лицензионной информацией, размещенной на сайте MySQL (http://www.mysql.com).
Последнюю версию MySQL можно принять с любого зеркального сайта. Полный список зеркальных сайтов приведен по адресу http://www.mysql.com/downloads/ mirrors.html. На момент написания книги последняя стабильная версия MySQL имела номер 3.22.32, а версия 3.32 находилась на стадии бета-тестирования. Конечно, всегда следует устанавливать последнюю стабильную версию, это в ваших интересах. Посетите ближайший «зеркальный» сайт и загрузите версию, соответствующую вашей операционной системе. В верхней части страницы расположены ссылки на новые версии для различных платформ. Обязательно прочитайте всю страницу, поскольку она завершается ссылками для некоторых специфических ОС.
Группа разработчиков MySQL подготовила подробную документацию с описанием процесса установки. Я советую внимательно изучить все общие аспекты установки, не ограничиваясь информацией, относящейся непосредственно к вашей операционной системе.
Настройка MySQL
После успешной установки сервер MySQL необходимо настроить. Процесс настройки в основном состоит из создания новых баз данных и редактирования таблиц привилегий MySQL. Таблицы привилегий управляют доступом к базам данных MySQL. Правильная настройка таблиц играет чрезвычайно важную роль в безопасности ваших баз данных, поэтому перед запуском сайта в рабочем режиме необходимо полностью освоить систему привилегий.
На первый взгляд, таблицы привилегий MySQL выглядят устрашающе, но если в них как следует разобраться, дальнейшее сопровождение становится очень простой задачей. Полное описание таблиц привилегий выходит за рамки этой книги. Впрочем, в Web существует немало ресурсов, предназначенных для помощи начинающим пользователям MySQL. За дополнительной информацией обращайтесь на сайт MySQL (http://www.mysql.com).
После успешной установки и настройки пакета MySQL можно начинать эксперименты с базами данных в среде Web! Именно этой теме и посвящен следующий раздел. Начнем с изучения поддержки MySQL в PHP.
Стандартные функции PHP для работы с MySQL
Итак, вы успешно создали и протестировали все необходимые разрешения; все готово для работы с сервером MySQL. В этом разделе я представлю стандартные функции PHP, при помощи которых вы сможете легко организовать взаимодействие сценариев PHP с сервером MySQL. Общая последовательность действий при взаимодействии с сервером MySQL выглядит так:
- Установить соединение с сервером MySQL. Если попытка завершается неудачей, вывести соответствующее сообщение и завершить процесс.
- Выбрать базу данных сервера MySQL. Если попытка выбора завершается неудачей, вывести соответствующее сообщение и завершить процесс. Допускается одновременное открытие нескольких баз данных для обработки запросов.
- Обработать запросы к выбранной базе (или базам).
- После завершения обработки запросов закрыть соединение с сервером баз данных.
В примерах этого раздела используются таблицы products, customers и orders (см. рис. 11.1). Если вы захотите самостоятельно проверить все примеры, создайте эти таблицы или скопируйте страницу с описанием структуры, чтобы вам не приходилось постоянно листать книгу.
Итак, начнем с самого начала -- то есть с подключения к серверу MySQL.
Функция mysql_connect() устанавливает связь с сервером MySQL После успешного подключения к MySQL можно переходить к выбору баз данных, обслуживаемых этим сервером. Синтаксис функции mysql_connect():
int mysql_connect ( [:/путь//к/сокету] [, string имя пользователя] [, string пароль])
В параметре хост передается имя хостового компьютера, указанное в таблицах привилегий сервера MySQL. Конечно, оно же используется для перенаправления запросов на web-сервер, на котором работает MySQL, поскольку к серверу MySQL можно подключаться в удаленном режиме. Наряду с именем хоста могут указываться необязательные параметры -- номер порта, а также путь к сокету (для локального хоста). Параметры имя_пользователя и пароль должны соответствовать имени пользователя и паролю, заданным в таблицах привилегий MySQL. Обратите внимание: все параметры являются необязательными, поскольку таблицы привилегий можно настроить таким образом, чтобы они допускали соединение без проверки. Если параметр хост не задан, mysql_connect() пытается установить связь с локальным хостом.
Пример открытия соединения с MySQL:
@mysql_connect(" local host", "web", "4tf9zzzf")
В данном примере localhost -- имя компьютера, web-- имя пользователя, а 4tf9zzzf -- пароль. Знак @ перед вызовом функции mysql_connect() подавляет все сообщения об ошибках, выдаваемые при неудачной попытке подключения, -- они заменяются сообщением, указанным при вызове die(). Обратите внимание: значение, возвращаемое при вызове rnysql_connect(), в данном примере не используется. Если в программе используется всего одно соединение с сервером MySQL, это вполне нормально. Но если программа устанавливает соединения с несколькими серверами MySQL на разных хостах, следует сохранить идентификатор соединения, возвращаемый при вызове mysql_connect(), чтобы адресовать последующие команды нужному серверу MySQL. Пример:
$link1 = @mysql_connect("www.somehost.com", "web", "abcde") or die("Could not connect to
MySQL server!");
$linkl = @mysql_connect("www.someotherhost.com", "usr", "secret") or die("Could not connect
to MySQL server!");
Идентификаторы $link1 и $link2 передаются при последующих обращениях к базам данных с запросами. Вскоре вы узнаете, как именно адресовать запрос нужному серверу при помощи идентификатора соединения.
Функция mysql_pconnect() обеспечивает поддержку восстанавливаемых (persistent) соединений. В многопользовательских средах рекомендуется использовать mysql_pconnect() вместо mysql_connect() для экономии системных ресурсов. По типам параметров и возвращаемого значения функция mysql_pconnect() в точности совпадает c mysql_connect().
mysql_select_db()
После успешного соединения с MySQL необходимо выбрать базу данных, находящуюся на сервере. Для этого используется функция mysql_select_db(). Синтаксис функции mysql_select_db():
int mysql_select_db (string имя_базы_данных [, int идентификатор_соединения])
Параметр имя_базы_данных определяет выбираемую базу данных, идентификатор
которой возвращается функцией mysql_select_db(). Обратите внимание: параметр
идентификатор_соединения необязателен лишь при одном открытом соединении с
сервером MySQL. При наличии нескольких открытых соединений этот параметр
должен указываться. Пример выбора базы данных функцией mysql_select_db():
or die("Could not connect to MySQL server!");
Если в программе выбирается только одна база данных, сохранять ее идентификатор не обязательно. Однако при выборе нескольких баз данных возвращаемые идентификаторы сохраняются, чтобы вы могли сослаться на нужную базу при обработке запроса. Если идентификатор не указан, используется последняявыбранная база данных.
После завершения работы с сервером MySQL соединение необходимо закрыть. Функция mysql_close() закрывает соединение, определяемое необязательным параметром. Если параметр не задан, функция mysql_close() закрывает последнее открытое соединение. Синтаксис функции mysql_close():
int mysql_close ()
Пример использования mysql_close():
@mysql_connect("localhost", "web", "4tf9zzzf")
or die("Could not connect to MySQL server!");
@mysql_select_db("company") or die("Could not select company database!"); print "You"re connected to a MySQL database!";
В этом примере указывать идентификатор соединения не нужно, поскольку на момент вызова mysql_close() существует лишь одно открытое соединение с сервером.
Соединения, открытые функцией mysql_pconnect(), закрывать не обязательно.
Функция mysql_query() обеспечивает интерфейс для обращения с запросами к базам
данных. Синтаксис функции mysql_query():
int mysql_query (string запрос [, int идентификатор_соединения])
Параметр запрос содержит текст запроса на языке SQL. Запрос передается либо соединению, определяемому необязательным параметром идентификатор_соедине-ния, либо, при отсутствии параметра, последнему открытому соединению.
Неопытные программисты часто ошибочно думают, что функция mysql_query() возвращает результаты обработки запроса. Это не так -- в зависимости от типа запроса вызов mysql_query() может приводить к разным последствиям. При успешном выполнении команды SQL SELECT возвращается идентификатор результата, который впоследствии передается функции mysql_result() для последующего форматирования и отображения результатов запроса. Если обработка запроса завершилась неудачей, функция возвращает FALSE. Функция mysql_result() описана в одном из следующих разделов. Количество записей, участвующих в запросе, определяется при помощи функции mysql_num_rows(). Эта функция также описана далее.
Учитывая сказанное, я приведу примеры использования mysql_query() лишь после описания функций mysql_result() и mysql_affected_rows().
Если вас беспокоит то, что при обработке запросов расходуется слишком много памя-ти, вызовите стандартную функцию PHP mysql_free_result. При вызове ей передается идентификатор результата, возвращаемый mysql_query(). Функция mysql_free_result() освобождает всю память, связанную с данным запросом.
mysqLaff ected_rows ()
Во многих ситуациях требуется узнать количество записей, участвующих в запросе SQL с командами INSERT, UPDATE, REPLACE или DELETE. Задача решается функцией mysql_affected_rows(). Синтаксис функции:
int mysql_affected_rows ()
Обратите внимание: параметр идентификатор_соединения не является обязательным. Если он не указывается, mysql_affected_rqws() пытается использовать последнее открытое соединение. Пример:
// Подключиться к серверу и выбрать базу данных
@mysql_connect("localhost", "web". "4tf9zzzf")
or die("Could not connect to MySQL server!");
@mysql_select_db("company") or die("Could not select company database!");
// Создать запрос
$query = "UPDATE products SET prod_name = \"cantaloupe\"
WHERE prod_id = \"10001pr\";
// Выполнить запрос
// Определить количество обновленных записей
print "Total row updated; ".mysql_affected_rows();
При выполнении этого фрагмента будет выведен следующий результат:
Total row updated: 1
Функция mysql_affected_rows() не работает с запросами, основанными на команде SELECT. Для определения количества записей, возвращенных при вызове SELECT, используется функция mysql_num_rows(), описанная в следующем разделе.
В одной специфической ситуации функция mysql_affected_rows() работает с ошибкой. При выполнении команды DELETE без секции WHEREmysql_affected_rows() всегда возвращает 0.
mysql_num_rows()
Функция mysql_num_rows() определяет количество записей, возвращаемых командой SELECT. Синтаксис функции mysql_num_rows():
int mysql_num_rows(int результат)
Пример использования mysql_num_rows():
// Подключиться к серверу и выбрать базу данных @mysql_connect("localhost", "web", "4tf9zzzf")
or die("Could not connect to MySQL server!");
@mysql_select_db("company") or die("Could not select company database!");
// Выбрать все товары, названия которых начинаются с "р"
$query = "SELECT prod_name FROM products WHERE prod_name LIKE \"p*\"";
print "Total rows selected: ".mysql_num_rows($result);
Поскольку таблица содержит лишь один товар, название которого начинается с буквы р (pears), возвращается только одна запись. Результат:
Total rows selected: 1
Функция mysql_result() используется в сочетании с mysql_query() (при выполнении запроса с командой SELECT) для получения набора данных. Синтаксис функции mysql_resu1t():
int mysql_result (int идентификатор_результата, int запись [. mixed поле"]")
В параметре идентификатор_результата передается значение, возвращенное функцией mysql_query(). Параметр запись ссылается на определенную запись набора данных, определяемого параметром идентификатор_результата. Наконец, в необязательном параметре поле могут передаваться:
- смещение поля в таблице;
- имя поля;
- имя поля в формате имя_поля_имя_тдблицы.
В листинге 11.1 используется база данных, изображенная на рис. 11.1.
Листинг 11.1. Выборка и форматирование данных в базе данных MySQL
@mysql_connect("localhost", "web", "ffttss")
or die("Could not connect to MySQL server!");
@mysql_select_db("company")
// Выбрать все записи из таблицы products
$query = "SELECT * FROM products"; $result = mysql_query($query);
print "
Product ID | Product Name | Product Price | \n
---|---|---|
$id | \n$name | \n$price | \n";
В результате выполнения этого примера с данными, изображенными на рис. 11.1, будет получен следующий результат:
Листинг 11.2. Результат выполнения листинга 11.1
Функция mysql_result() удобна для работы с относительно небольшими наборами данных, однако существуют и другие функции, работающие намного эффективнее, -- а именно, функции mysql_fetch_row() и mysql_fetch_array(). Эти функции описаны в следующих разделах.
mysql_fetch_row()
Обычно гораздо удобнее сразу присвоить значения всех полей записи элементам индексируемого массива (начиная с индекса 0), нежели многократно вызывать mysql_result() для получения отдельных полей. Задача решается функцией mysql_fetch_row(), имеющей следующий синтаксис:
array mysql_fetch_row (int результат)
Использование функции list() в сочетании с mysql_fetch_row() позволяет сэкономить несколько команд, необходимых при использовании mysql_result(). В листинге 11.3 приведен код листинга 11.1, переписанный с использованием list() и mysql_fetch_row().
Листинг 11.3. Выборка данных функцией mysql_fetch_row()
@mysql_connect("localhost", "web", "ffttss") or die("Could not connect to MySQL server!");
@mysql_select_db("company") or die("Could not select products database!");
$query = "SELECT * FROM products";
$result = mysql_query($query);
print "
Product ID | Product Name |
Product Price | \n
---|---|---|
".$row["prod_id"]." | \n".$row["prod_name"]." | \n" .$row["prod_price"]. " | \n";
Листинг 11.3 выдает тот же результат, что и листинг 11.1, но использует при этом меньшее количество команд.
my sq l_f etch_array ()
Функция mysql_fetch_array() аналогична mysql_fetch_row(), однако по умолчанию значения полей записи сохраняются в ассоциативном массиве. Впрочем, вы можете выбрать тип индексации (ассоциативная, числовая или комбинированная). Синтаксис функции mysql_fetch_array():
array mysql_fetch_array (int идентификатор результата [, тип_индексации])
В параметре идентификатор_результата передается значение, возвращенное функцией mysql_query(). Необязательный параметр тип_индексации принимает одно из следующих значений:
- MYSQL_ASSOC -- функция mysql_fetch_array() возвращает ассоциативный массив. Если параметр не указан, это значение используется по умолчанию;
- MYSQL_NUM -- функция mysql_fetch_array() возвращает массив с числовой индексацией;
- MYSQL_BOTH -- к полям возвращаемой записи можно обращаться как по числовым, так и по ассоциативным индексам.
Листинг 11.4 содержит очередной вариант кода листингов 11.1 и 11.3. На этот раз используется функция mysql_fetch_array(), возвращающая ассоциативный массив полей.
Листинг 11.4. Выборка данных функцией mysql_fetch_array()
@mysql_connect("local host", "web", "ffttss")
or die("Could not connect to MySQL server!");
@mysql_select_db("company")
or die("Could not select products database!");
$query = "SELECT * FROM products";
$result = mysql_query($query);
"
Product ID | Product Name | Product Price | \n
---|---|---|
".$row["prod_id"]." | \n".$row["prod_name"]." | \n" . $row["prod_price"] . " | \n" ;
Листинг 11.4 выдает тот же результат, что и листинги 11.1 и 11.3.
Того, что сейчас вы знаете о функциональных возможностях MySQL в PHP, вполне достаточно, чтобы заняться созданием довольно интересных приложений. Первое приложение, которое мы рассмотрим, представляет собой простейшую поисковую систему. Этот пример демонстрирует применение форм HTML (см. предыдущую главу) для получения данных, которые в дальнейшем используются для выборки информации из базы.
Пример простейшей поисковой системы на PHP
Всем нам неоднократно приходилось пользоваться поисковыми системами в Web, но как устроены такие системы? Простейшая поисковая система принимает по крайней мере одно ключевое слово. Это слово включается в запрос SQL, который затем используется для выборки информации из базы данных. Результат поиска форматируется поисковой системой по тому или иному критерию (скажем, по категории или степени соответствия).
Поисковая система, приведенная в листинге 11.5, предназначена для поиска информации о клиентах. В форме пользователь вводит ключевое слово и выбирает категорию (имя, идентификатор или адрес электронной почты клиента), в которой будет производиться поиск. Если введенное пользователем имя, идентификатор или адрес существует, поисковая система извлекает из базы данных остальные атрибуты. Затем по идентификатору покупателя из таблицы orders выбирается
история заказов. Все заказы, оформленные этим клиентом, отображаются по убыванию объема. Если заданное ключевое слово не встречается в категории, указанной пользователем, поиск прекращается, программа выводит соответствующее сообщение и снова отображает форму.
Листинг 11.5. Простейшая поисковая система (searchengine.php)
"
Результаты заполнения этой формы передаются в insert_book.php.
Пример 2.2
В примере 2.2 введенные строковые данные обработаны функцией addslashes() . Эта функция добавляет обратные слеши перед одинарными кавычками ("), двойными кавычками ("), обратным слешем (\) и null-байтом. Дело в том, что по требованиям систаксиса запросов баз данных такие символы дожны заключаться в кавычки.
Для определения количества записей в результате запроса используется функция mysql_num_rows() .
Все записи результата запроса можно просмотреть в цикле. Перед этим с помощью функции mysql_fetch_ для каждой записи получают ассоциативный массив.
В примере 3.1 приведена HTML-форма для поиска определенных книг в базе данных.
Пример 3.1
Результаты заполнения этой формы передаются в search_book.php.
Пример 3.2
".($i+1). $row["title"]. "
Альтернативный вариант
Пожалуйста, вернитесь назад и закончите ввод"); $searchterm = addslashes ($searchterm); mysql_connect() or die ("Невозможно подключение к MySQL"); mysql_select_db ("sample") or die ("Невозможно открыть БД"); $result = mysql_query ("SELECT * FROM books WHERE ".$_POST["searchtype"]." like "%".$searchterm."%""); $i=1; while($row = mysql_fetch_array($result)) { echo "
".($i++) . $row["title"]."
";
echo "Автор: ".$row["author"]."
";
echo "ISBN: ".$row["ISBN"]."
";
echo "Цена: ".$row["price"]."
";
echo "Количество: ".$row["quantity"]."
Итак, как работает архитектура Web-баз данных:
- Web-браузер пользователя выдает HTTP-запрос определенной Web-страницы. Например, пользователь, используя HTML-форму, ищет все книги о PHP. Страница обработки формы называется search_book.php.
- Web-сервер принимает запрос на search_book.php, извлекает этот файл и передает на обработку механизму PHP.
- PHP выполняет соединение с MySQL-сервером и отправляет запрос.
- Сервер принимает запрос к базе данных, обрабатывает его и отправляет результат (список книг) обратно механизму PHP.
- Механизм PHP завершает выполнение сценария, форматирует результат запроса в HTML. После этого результат в виде HTML возвращается Web-серверу.
- Web-сервер пересылает HTML в браузер, и пользователь имеет возможность просмотреть запрошенный список книг.
Использование механизма транзакций
Использование механизма транзакция на примере как передать деньги от одного человека другому
If(mysql_query ("BEGIN") && mysql_query ("UPDATE money SET amt = amt - 6 WHERE name = "Eve"") && mysql_query ("UPDATE money SET amt = amt + 6 WHERE name = "Ida"") && mysql_query ("COMMIT")){ echo "Успешно"; }else{ mysql_query ("ROLLBACK"); echo "Не успешно"; }
SELECT … FOR UPDATE
Если Вы запускаете несколько процессов, которые делают select запрос к одной и той же таблице, то они могут выбрать одну и ту же запись одновременно.
Чтобы избежать вышеупомянутой ситуации необходимо выполнить не просто SELECT запрос, а его расширенную версию, о которой многие и не подозревают: SELECT … FOR UPDATE.
Таким образом, при выполнении данного запроса, все затронутые записи в базе данных будут заблокированы до завершения сеанса работы с БД или до момента обновления данных записей. Другой скрипт не сможет выбрать заблокированные записи до тех пор, пока не наступит одно из упомянутых условий.
Однако не всё так просто. Вам нужно выполнить ещё несколько условий. Во-первых, ваша таблица должна быть создана на основе архитектуры InnoDB. В противном случае блокировка просто не будет срабатывать. Во-вторых, перед выполнением выборки необходимо отключить авто-коммит запроса. Т.е. другими словами автоматическое выполнение запроса. После того как вы укажите UPDATE запрос, необходимо будет ещё раз обратиться к базе и закоммитить изменения с помощью команды COMMIT: