php 用 mysqli 查询数据的时候,使用 Prepared Statements

发布时间:2025-05-13      访问量:56
以下是使用 PHP mysqli 预处理语句(Prepared Statements)进行数据库查询的示例代码,包含查询、插入、更新和删除操作:

php <?php // 数据库配置 $host = 'localhost'; $username = 'your_username'; $password = 'your_password'; $database = 'your_database'; // 创建数据库连接 $conn = new mysqli($host, $username, $password, $database); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 1. 查询数据(SELECT) $email = "test@example.com"; $stmt = $conn->prepare("SELECT id, name, email FROM users WHERE email = ?"); $stmt->bind_param("s", $email); // "s" 表示字符串类型 $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { echo "ID: " . $row["id"] . ", 姓名: " . $row["name"] . ", 邮箱: " . $row["email"] . "<br>"; } } else { echo "未找到匹配记录"; } $stmt->close(); // 2. 插入数据(INSERT) $name = "张三"; $email = "zhangsan@example.com"; $stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)"); $stmt->bind_param("ss", $name, $email); // 两个 "s" 分别对应两个字符串参数 if ($stmt->execute()) { echo "新记录插入ID: " . $stmt->insert_id . "<br>"; } else { echo "错误: " . $stmt->error . "<br>"; } $stmt->close(); // 3. 更新数据(UPDATE) $newName = "李四"; $id = 1; $stmt = $conn->prepare("UPDATE users SET name = ? WHERE id = ?"); $stmt->bind_param("si", $newName, $id); // "s" 字符串,"i" 整数 if ($stmt->execute()) { echo "更新成功,影响行数: " . $stmt->affected_rows . "<br>"; } else { echo "错误: " . $stmt->error . "<br>"; } $stmt->close(); // 4. 删除数据(DELETE) $id = 2; $stmt = $conn->prepare("DELETE FROM users WHERE id = ?"); $stmt->bind_param("i", $id); // "i" 表示整数类型 if ($stmt->execute()) { echo "删除成功,影响行数: " . $stmt->affected_rows . "<br>"; } else { echo "错误: " . $stmt->error . "<br>"; } $stmt->close(); // 关闭数据库连接 $conn->close(); ?>

预处理语句的优势:
1. **防止SQL注入**:通过参数化查询,自动处理特殊字符转义
2. **性能优化**:查询语句只编译一次,多次执行时更快
3. **代码安全**:分离SQL逻辑和用户输入,降低安全风险

参数类型说明:
- `i` - 整数(integer)
- `d` - 双精度浮点数(double)
- `s` - 字符串(string)
- `b` - 二进制数据(blob)

使用建议:
1. 在实际项目中,建议:
- 将数据库配置信息存储在独立配置文件中
- 添加更完善的错误处理机制
- 使用try-catch块处理异常(需要启用mysqli的异常模式)
- 对敏感数据进行加密存储
- 定期备份数据库

2. 启用mysqli异常模式示例:
php mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); try { $conn = new mysqli($host, $username, $password, $database); // 数据库操作 } catch (mysqli_sql_exception $e) { die("数据库错误: " . $e->getMessage()); }
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念