PHP MySQL DELETE Query
In this tutorial you’ll learn how to delete records from a MySQL table using PHP.
Deleting Database Table Data
Just as you insert records into tables, you can delete records from a table using the SQL DELETE statement. It is typically used in conjugation with the WHERE clause to delete only those records that matches specific criteria or condition.
The basic syntax of the DELETE statement can be given with:
Let’s make a SQL query using the DELETE statement and WHERE clause, after that we will execute this query through passing it to the PHP mysqli_query() function to delete the tables records. Consider the following persons table inside the demo database:
+----+------------+-----------+----------------------+ | id | first_name | last_name | email | +----+------------+-----------+----------------------+ | 1 | Peter | Parker | peterparker@mail.com | | 2 | John | Rambo | johnrambo@mail.com | | 3 | Clark | Kent | clarkkent@mail.com | | 4 | John | Carter | johncarter@mail.com | | 5 | Harry | Potter | harrypotter@mail.com | +----+------------+-----------+----------------------+
The PHP code in the following example will delete the records of those persons from the persons table whose first_name is equal to John.
Example
// Attempt delete query execution $sql = "DELETE FROM persons WHERE first_name='John'"; if(mysqli_query($link, $sql)) < echo "Records were deleted successfully."; >else < echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); >// Close connection mysqli_close($link); ?>
connect_error); > // Attempt delete query execution $sql = "DELETE FROM persons WHERE first_name='John'"; if($mysqli->query($sql) === true) < echo "Records were deleted successfully."; >else< echo "ERROR: Could not able to execute $sql. " . $mysqli->error; > // Close connection $mysqli->close(); ?>
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); > catch(PDOException $e)< die("ERROR: Could not connect. " . $e->getMessage()); > // Attempt update query execution try< $sql = "DELETE FROM persons WHERE first_name='John'"; $pdo->exec($sql); echo "Records were deleted successfully."; > catch(PDOException $e)< die("ERROR: Could not able to execute $sql. " . $e->getMessage()); > // Close connection unset($pdo); ?>
After the deletion the persons table will look something like this:
+----+------------+-----------+----------------------+ | id | first_name | last_name | email | +----+------------+-----------+----------------------+ | 1 | Peter | Parker | peterparker@mail.com | | 3 | Clark | Kent | clarkkent@mail.com | | 5 | Harry | Potter | harrypotter@mail.com | +----+------------+-----------+----------------------+
As you can see the records has been deleted successfully from the persons table.
Warning: The WHERE clause in the DELETE statement specifies which record or records should be deleted. If you omit the WHERE clause, all records will be deleted.
Php query delete table
Для удаления данных применяется sql-команда DELETE :
DELETE FROM Таблица WHERE столбец = значение
Для удаления данных возьмем использованную в прошлых темах таблицу Users со следующим определением:
CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)
Объектно-ориентированный стиль
Вначале определим для вывода всех объектов из БД скрипт index.php :
Список пользователей
connect_error)< die("Ошибка: " . $conn->connect_error); > $sql = "SELECT * FROM Users"; if($result = $conn->query($sql))< echo "
Имя | Возраст | |
---|---|---|
" . $row["name"] . " | "; echo "" . $row["age"] . " | "; echo ""; echo " |
В таблицы для каждой строки определена форма, которая посылает данные в POST-запросе скрипту delete.php . Чтобы передать в delete.php идентификатор удаляемого объекта, на форме определено скрытое поле для хранения id объекта.
Обратите внимание, что в данном случае применяется не ссылка для удаления типа
которая оправляет данные в GET-запросе, а именно форма, которая отправляет данные в POST-запросе. Почему? Подобные GET-запросы потенциально небезопасны. Допустим, нам пришло электронное письмо, в которое была внедрена картинка посредством тега:
В итоге при открытии письма 1-я запись в таблице может быть удалена. Уязвимость касается не только писем, но может проявляться и в других местах, но смысл один — GET-запрос к скрипту, который удаляет данные, несет потенциальную уязвимость.
Теперь определим сам скрипт delete.php , который будет выполнять удаление:
connect_error)< die("Ошибка: " . $conn->connect_error); > $userid = $conn->real_escape_string($_POST["id"]); $sql = "DELETE FROM Users WHERE "; if($conn->query($sql)) < header("Location: index.php"); >else< echo "Ошибка: " . $conn->error; > $conn->close(); > ?>
В данном случае скрипт получает через POST-запрос значение id и по этому идентификатору выполняет удаление. После чего происходит переадресация на скрипт index.php .
Процедурный стиль
Список пользователей
$sql = "SELECT * FROM Users"; if($result = mysqli_query($conn, $sql))< echo "
Имя | Возраст | |
---|---|---|
" . $row["name"] . " | "; echo "" . $row["age"] . " | "; echo ""; echo " |
$userid = mysqli_real_escape_string($conn, $_POST["id"]); $sql = "DELETE FROM Users WHERE "; if(mysqli_query($conn, $sql)) < header("Location: index.php"); >else < echo "Ошибка: " . mysqli_error($conn); >mysqli_close($conn); > ?>
Создание и удаление таблиц
CREATE TABLE name_table(
id INT(11) PRIMARY KEY AUTO_INCREMENT NOT NULL ,
title VARCHAR(255) ,
message TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
age INT(11) DEFAULT 0 ,
price DOUBLE
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
PRIMARY KEY — первичный ключ, ограничение, позволяющее однозначно идентифицировать каждую запись в таблице SQL.
Первичные ключи должны содержать уникальные значения.
Первичный ключ не может иметь значения NULL.
NOT NULL — означает, что каждая строка должна содержать значение для этого столбца, нулевые значения допускаться не будут.
AUTO_INCREMENT — автоматический инкремент.
CHARACTER SET utf8 COLLATE utf8_general_ci — кодировка для конкретного поля, ставится сразу после типа.
). — здесь кодировка задана для всех полей
DEFAULT — значение по умолчанию.
ENGINE=InnoDB — тип таблицы(используемый движок) — InnoDB
Пример запроса на удаление таблицы name_table :
$sql = «DROP TABLE name_table» ;
Удалить все данные из таблицы
— данная команда очистит полностью таблицу и приведет ее к первоначальному состоянию,
когда она только создалась ( CREATE TABLE ) и в ней не было никаких записей.
— данная команда не производит сброс счётчика AUTO_INCREMENT , который используется, как известно, для автоматической генерации значения поля без необходимости его ручной установки. Чтобы этого избежать, можно использовать вместо команды выше данный вариант:
TRUNCATE TABLE name_table RESTART IDENTITY ;
— данный вариант вызова команды TRUNCATE позволит сбросить значение счётчика полей с AUTO_INCREMENT .
Поэтому значение поля первой добавленной записи после данного удаления будет 1 .
ПРИМЕРЫ создания таблиц
1 mysqli — объектно-ориентированный подход
// Создаем переменные
$servername = «localhost» ; // для локального сервера на компьютере
$username = «root» ; // имя пользователя
$password = «» ; // пароль если существует
$dbname = «newDB» ; // имя базы данных
// Устанавливаем соединение с сервером MySQL:
// создаем экземпляр класса new mysqli() и записываем, в качестве аргументов, наши переменные
$conn = new mysqli ( $servername , $username , $password , $dbname );
// Проверка соединения:
// если выполняется выражение $conn->connect_error , то останавливаем выполнение die
// и выводим «Не удалось подключиться»
// С помощью выражения $conn -> connect_error выведем информацию об ошибке .
// Иначе выведем: «Соединение успешно установлено»
if ( $conn -> connect_error ) die ( «Не удалось подключиться: » . $conn -> connect_error );
>
echo «Соединение успешно установлено» ;
// Запрос для создания таблицы users1
$sql = «CREATE TABLE users(
name VARCHAR(30) NOT NULL,
surname VARCHAR(30) NOT NULL PRIMARY KEY,
password VARCHAR(30) NOT NULL )» ;
// Проверка выполнения создания таблицы:
// Если значение $conn -> query($sql) будет — TRUE,
// тогда выведем сообщение «Таблица users создана успешно».
// В противном случае выведем сообщение «Ошибка при создании таблицы»
// и выведем информацию об ошибке: $conn->error.
if ( $conn -> query ( $sql ) === TRUE ) echo «Таблица users создана успешно
» ;
> else <
echo «Ошибка при создании таблицы: » . $conn -> error ;
>
// закрываем соединение
$conn -> close ();
?>
— После перезагрузки страницы выведет в браузере:
Таблица users создана успешно
В phpMyAdmin в базе данных newDB появилась таблица » users «
2 mysqli — процедурный подход
// Создаем переменные
$servername = «localhost» ; // для локального сервера на компьютере
$username = «root» ; // имя пользователя
$password = «» ; // пароль если существует
$dbname = «newDB» ; // имя базы данных
// Устанавливает соединение с сервером MySQL с помощью функции mysqli_connect()
$conn = mysqli_connect ( $servername , $username , $password , $dbname );
if (! $conn ) die ( «Не удалось подключиться: » . mysqli_connect_error ());
>
echo «Соединение успешно установлено» ;
// Запрос для создания таблицы:
// NOT NULL — означает, что каждая строка должна содержать значение для этого столбца,
// нулевые значения допускаться не будут.
// PRIMARY KEY — первичный ключ, ограничение, позволяющее однозначно идентифицировать
// каждую запись в таблице SQL.
$sql = «CREATE TABLE users2(
name VARCHAR(30) NOT NULL,
surname VARCHAR(30) NOT NULL PRIMARY KEY, password VARCHAR(30) NOT NULL )» ;
// Проверка выполнения создания таблицы:
// Если запрос к базе данных — выполнен,
// тогда выведем сообщение «Таблица users2 создана успешно».
// В противном случае выведем сообщение «Ошибка при создании таблицы»
// и выведем информацию об ошибке mysqli_error($conn) ;
if ( mysqli_query ( $conn , $sql )) echo «Таблица users2 создана успешно
» ;
> else <
echo «Ошибка при создании таблицы: » . mysqli_error ( $conn ); >
// закрываем соединение
mysqli_close ( $conn );
?>
— После перезагрузки страницы выведет в браузере:
Таблица users2 создана успешно
В phpMyAdmin в базе данных newDB появилась таблица » users2 «
// Создаем переменные
$servername = «localhost» ; // для локального сервера на компьютере
$username = «root» ; // имя пользователя
$password = «» ; // пароль если существует
$dbname = «newDB» ; // имя базы данных
// Подключение к серверу MySQL
// Обработка ошибок подключения: используем блок try-catch :
try // Подключение к серверу MySQL
$conn = new PDO ( «mysql:host= $servername ; dbname= $dbname » , $username , $password );
echo «Соединение успешно установлено
» ;
// Устанавливаем режим ошибки PDO в исключение
$conn -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION );
> catch ( PDOException $e ) <
echo «Ошибка при создании таблицы:
» . $e -> getMessage ();
>
// Созданние таблицы
try // Созданние SQL-запроса
$sql = «CREATE TABLE users3(
name VARCHAR(30) NOT NULL,
surname VARCHAR(30) NOT NULL PRIMARY KEY,
password VARCHAR(30) NOT NULL )» ;
// Устанавливаем режим ошибки PDO в исключение
$conn -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION );
$conn -> exec ( $sql );
echo «Таблица users3 создана успешно
» ;
> catch ( PDOException $e ) <
echo «Ошибка при создании таблицы:
» . $sql . $e -> getMessage ();
>
// Закрыть подключение
$conn = null ;
?>
— После перезагрузки страницы выведет в браузере:
Таблица users3 создана успешно
В phpMyAdmin в базе данных newDB появилась таблица » users3 «