PHP работа с базой данных (Часть 3)
Здравствуй уважаемый читатель блога, эта статья завершающая в цикле статей PHP работа с базой данных, в ней мы рассмотрим оставшиеся вопросы:
- Как удалить запись?
- Как удалить таблицу?
- Как удалить БД?
Все может показаться просто, на самом деле так и есть, все эти задачи
решаются выполнением одного запроса к БД с помощью функции mysql_query().
Загвоздка может случиться при попытке в одном запросе выполнить
несколько действий. К примеру, может понадобиться сначала удалить
запись, затем удалить таблицу, и в итоге всю базу последовательно. Для
этого, если ты уважаемый читатель пользуешься phpMyAdmin, тебе понадобится выполнить вот такой запрос:
1 2 3
| DELETE FROM `table` WHERE `id` = 1;
DROP TABLE `table`;
DROP DATABASE `db_test`; |
Но в случае выполнения тогоже запроса средствами php, компилятор начнет ругаться.
Пример не правильного использования mysql_query:
1 2 3 4 5
| mysql_query("
DELETE FROM `table` WHERE `id` = 1;
DROP TABLE ` table`;
DROP DATABASE `db_test`;
") |
Дело в том, что этот запрос содержит в себе три других, а mysql_query() способна выполнить только один, следовательно придется писать вместо одного вызова последовательно три.
Запрос на удаление строки из таблицы
1
| mysql_query("DELETE FROM `table` WHERE `id` = 1") |
Запрос на удаление самой таблицы
1
| mysql_query("DROP TABLE ` table`") |
Запрос на удаление всей базы
1
| mysql_query("DROP TABLE ` table`") |
При таком подходе ошибок не возникнет. Наверное ты читатель задался вопросом, почему объединенные запросы работают в phpMyAdmin? А работают они потому, что phpMyAdmin
разбирает полученный запрос на несколько используя указанный
разделитель, который можно выбрать чуть ниже области ввода запроса. По
умолчанию в качестве разделителя выбран символ точка с запятой, поэтому
складывается ощущение, что совокупность запросов собранная в один,
выполняется без прекословно, но на самом деле они также выполняются
поочередно, только делается все это автоматически. При желании можно
написать обработчик, который выполнит комбинированный запрос, разобрав
его на отдельные части:
Функция выполнения комбинированного запроса
1 2 3 4 5 6 7 8
| <?php
function my_mysql_query($sql){
$array_sqls = explode(";", $sql);
foreach($array_sqls as $sql){
mysql_query($sql) or die ("Ошибка запроса")
}
}
?> |
Теперь если передать написанной нами функции my_mysql_query()
запрос состоящий из нескольких и более, то компилятор ошибок не выдаст.
Работа данной функции схожа с принципом выполнения запросов в
phpMyAdmin.
|