奋斗
努力

PHP+MySQL实现增删改查,预处理方式

云计算

如果不使用 PDO,可以使用 MySQLi(MySQL Improved)扩展来实现 PHP 和 MySQL 的增删改查操作,并结合预处理语句(Prepared Statements)来防止 SQL 注入攻击。以下是详细的实现步骤:


1. 连接数据库

使用 mysqli_connect() 函数连接到 MySQL 数据库。

<?php
$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'test_db';

// 创建连接
$conn = mysqli_connect($host, $username, $password, $dbname);

// 检查连接
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}
echo "连接成功";
?>

2. 插入数据(Create)

使用预处理语句插入数据。

<?php
$name = "John Doe";
$email = "john@example.com";

// 准备预处理语句
$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $email); // "ss" 表示两个字符串类型参数

// 执行语句
if (mysqli_stmt_execute($stmt)) {
    echo "新记录插入成功";
} else {
    echo "插入失败: " . mysqli_error($conn);
}

// 关闭语句
mysqli_stmt_close($stmt);
?>

3. 查询数据(Read)

使用预处理语句查询数据。

<?php
// 准备预处理语句
$stmt = mysqli_prepare($conn, "SELECT id, name, email FROM users");
mysqli_stmt_execute($stmt);

// 绑定结果变量
mysqli_stmt_bind_result($stmt, $id, $name, $email);

// 获取结果
while (mysqli_stmt_fetch($stmt)) {
    echo "ID: $id, Name: $name, Email: $email<br>";
}

// 关闭语句
mysqli_stmt_close($stmt);
?>

4. 更新数据(Update)

使用预处理语句更新数据。

<?php
$id = 1;
$newEmail = "john.new@example.com";

// 准备预处理语句
$stmt = mysqli_prepare($conn, "UPDATE users SET email = ? WHERE id = ?");
mysqli_stmt_bind_param($stmt, "si", $newEmail, $id); // "si" 表示一个字符串和一个整数

// 执行语句
if (mysqli_stmt_execute($stmt)) {
    echo "记录更新成功";
} else {
    echo "更新失败: " . mysqli_error($conn);
}

// 关闭语句
mysqli_stmt_close($stmt);
?>

5. 删除数据(Delete)

使用预处理语句删除数据。

<?php
$id = 1;

// 准备预处理语句
$stmt = mysqli_prepare($conn, "DELETE FROM users WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id); // "i" 表示一个整数

// 执行语句
if (mysqli_stmt_execute($stmt)) {
    echo "记录删除成功";
} else {
    echo "删除失败: " . mysqli_error($conn);
}

// 关闭语句
mysqli_stmt_close($stmt);
?>

6. 关闭数据库连接

操作完成后,记得关闭数据库连接。

<?php
mysqli_close($conn);
?>

7. 完整示例

以下是一个完整的示例,包含增删改查操作:

<?php
// 连接数据库
$host = 'localhost';
$username = 'root';
$password = '';
$dbname = 'test_db';
$conn = mysqli_connect($host, $username, $password, $dbname);

if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}

// 插入数据
$name = "John Doe";
$email = "john@example.com";
$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $email);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);

// 查询数据
$stmt = mysqli_prepare($conn, "SELECT id, name, email FROM users");
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $id, $name, $email);
while (mysqli_stmt_fetch($stmt)) {
    echo "ID: $id, Name: $name, Email: $email<br>";
}
mysqli_stmt_close($stmt);

// 更新数据
$id = 1;
$newEmail = "john.new@example.com";
$stmt = mysqli_prepare($conn, "UPDATE users SET email = ? WHERE id = ?");
mysqli_stmt_bind_param($stmt, "si", $newEmail, $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);

// 删除数据
$id = 1;
$stmt = mysqli_prepare($conn, "DELETE FROM users WHERE id = ?");
mysqli_stmt_bind_param($stmt, "i", $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);

// 关闭连接
mysqli_close($conn);
?>

总结

  • 使用 MySQLi 扩展可以实现 PHP 和 MySQL 的增删改查操作。
  • 预处理语句(Prepared Statements)可以有效防止 SQL 注入攻击。
  • 相比于 PDO,MySQLi 更专注于 MySQL 数据库,适合不需要跨数据库兼容性的项目。

通过以上方法,你可以在不使用 PDO 的情况下,安全高效地操作 MySQL 数据库。

未经允许不得转载:云服务器 » PHP+MySQL实现增删改查,预处理方式