PHP MySQL DELETE 语句
DELETE 语句用于删除 MySQL 数据库中的一条或多条记录。在 PHP 中,我们可以通过 MySQLi 或 PDO 来执行 DELETE 语句。
1. MySQL DELETE 基本语法
DELETE FROM table_name
WHERE condition;
table_name:指定要删除数据的表。WHERE:指定条件,只有符合条件的记录会被删除。如果省略WHERE子句,将删除表中的所有记录。
2. 使用 MySQLi 执行 DELETE
2.1 面向对象方式
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 删除 SQL 语句
$sql = "DELETE FROM users WHERE id = 1";
// 执行删除查询
if ($conn->query($sql) === TRUE) {
echo "记录删除成功";
} else {
echo "错误: " . $conn->error;
}
// 关闭连接
$conn->close();
?>
📌 解析:
DELETE FROM users WHERE id = 1:删除id为1的记录。- 如果没有
WHERE子句,所有记录都将被删除。
2.2 面向过程方式
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检查连接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
// 删除 SQL 语句
$sql = "DELETE FROM users WHERE id = 1";
// 执行删除查询
if (mysqli_query($conn, $sql)) {
echo "记录删除成功";
} else {
echo "错误: " . mysqli_error($conn);
}
// 关闭连接
mysqli_close($conn);
?>
📌 解析:
- 使用
mysqli_query()执行DELETE查询。 - 删除记录时需要小心,确保指定了
WHERE子句。
3. 使用 PDO 执行 DELETE
3.1 使用 PDO 执行 DELETE 语句
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
try {
// 创建 PDO 连接
$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 设置错误模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 删除 SQL 语句
$sql = "DELETE FROM users WHERE id = :id";
// 准备 SQL 语句
$stmt = $pdo->prepare($sql);
// 绑定参数
$stmt->bindParam(':id', $id);
// 设置参数值
$id = 1;
// 执行删除查询
$stmt->execute();
echo "记录删除成功";
} catch (PDOException $e) {
echo "错误: " . $e->getMessage();
}
// 关闭连接
$pdo = null;
?>
📌 解析:
- 使用 预处理语句 防止 SQL 注入。
bindParam()用于绑定参数,execute()用于执行删除操作。
4. 删除所有记录(无条件删除)
如果没有 WHERE 子句,DELETE 会删除表中的所有记录。请小心使用此操作。
$sql = "DELETE FROM users"; // 删除 users 表中的所有记录
- 注意:这会清空整个表的数据,但不会删除表本身。如果希望删除表本身,请使用
DROP TABLE。
5. 使用 LIMIT 限制删除的记录
在某些情况下,您可能只想删除表中的部分记录。可以使用 LIMIT 子句来限制删除的记录数:
$sql = "DELETE FROM users WHERE age > 30 LIMIT 3"; // 删除年龄大于 30 的最多 3 条记录
- 这将删除
age > 30的最多 3 条记录。
6. 使用事务处理删除多条记录
当你进行多次删除操作时,使用事务(BEGIN, COMMIT, ROLLBACK)是一个好习惯,确保数据的一致性。
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
try {
// 创建 PDO 连接
$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 设置错误模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 开始事务
$pdo->beginTransaction();
// 删除记录
$pdo->exec("DELETE FROM users WHERE age < 20");
$pdo->exec("DELETE FROM users WHERE age > 60");
// 提交事务
$pdo->commit();
echo "记录删除成功";
} catch (PDOException $e) {
// 出错时回滚事务
$pdo->rollBack();
echo "错误: " . $e->getMessage();
}
// 关闭连接
$pdo = null;
?>
📌 解析:
beginTransaction():开始事务。commit():提交事务,删除记录。rollBack():如果出现错误,回滚事务,取消删除操作。
7. 删除记录后返回受影响的行数
通常你可能需要知道有多少条记录被删除。你可以通过 affected_rows(MySQLi)或 rowCount()(PDO)来获取。
MySQLi:
if ($conn->query($sql) === TRUE) {
echo $conn->affected_rows . " 行记录被删除";
}
PDO:
echo $stmt->rowCount() . " 行记录被删除";
8. 删除前的安全检查
- 确保删除操作是有条件的。未加
WHERE子句的DELETE会删除所有记录。 - 建议对删除操作进行确认,以防止误操作。例如,可以添加一个确认提示或日志记录。
总结
DELETE用于删除表中的记录,必须谨慎使用。- 使用
WHERE子句来限定删除条件,否则所有记录都会被删除。 - 使用预处理语句(
PDO或MySQLi)可以防止 SQL 注入。 - 可以结合
LIMIT来删除部分记录,或者使用事务来保证操作的原子性。
更多详细内容请关注其他相关文章!