PHP MySQL DELETE 语句
                           
天天向上
发布: 2025-03-22 00:19:11

原创
770 人浏览过

DELETE 语句用于删除 MySQL 数据库中的一条或多条记录。在 PHP 中,我们可以通过 MySQLiPDO 来执行 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:删除 id1 的记录。
  • 如果没有 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_rowsMySQLi)或 rowCount()PDO)来获取。

MySQLi

if ($conn->query($sql) === TRUE) {
    echo $conn->affected_rows . " 行记录被删除";
}

PDO

echo $stmt->rowCount() . " 行记录被删除";

8. 删除前的安全检查

  • 确保删除操作是有条件的。未加 WHERE 子句的 DELETE 会删除所有记录。
  • 建议对删除操作进行确认,以防止误操作。例如,可以添加一个确认提示或日志记录。

总结

  • DELETE 用于删除表中的记录,必须谨慎使用。
  • 使用 WHERE 子句来限定删除条件,否则所有记录都会被删除。
  • 使用预处理语句(PDOMySQLi)可以防止 SQL 注入。
  • 可以结合 LIMIT 来删除部分记录,或者使用事务来保证操作的原子性。

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *