php 如何通过mysqli操作数据库?

在PHP中,mysqli(MySQL Improved Extension)是操作MySQL数据库的扩展库,提供了面向对象和过程式两种风格。以下是mysqli的基本操作方法:

1. 连接数据库

面向对象风格
php 复制代码
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');

// 检查连接是否成功
if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
}

echo "连接成功";
过程式风格
php 复制代码
$conn = mysqli_connect('localhost', 'username', 'password', 'database_name');

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

echo "连接成功";

2. 执行查询(SELECT)

php 复制代码
// 准备SQL语句
$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);

// 检查查询结果
if ($result->num_rows > 0) {
    // 输出数据
    while ($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
    }
} else {
    echo "0 结果";
}

// 释放结果集
$result->free();

3. 预处理语句(防止SQL注入)

php 复制代码
// 准备SQL语句
$sql = "SELECT id, name, email FROM users WHERE age > ?";
$stmt = $mysqli->prepare($sql);

// 绑定参数
$age = 18;
$stmt->bind_param("i", $age); // "i" 表示整数类型

// 执行查询
$stmt->execute();

// 获取结果
$result = $stmt->get_result();

// 处理结果
while ($row = $result->fetch_assoc()) {
    echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
}

// 关闭预处理语句
$stmt->close();

4. 插入数据

php 复制代码
// 准备SQL语句
$sql = "INSERT INTO users (name, email, age) VALUES (?, ?, ?)";
$stmt = $mysqli->prepare($sql);

// 绑定参数
$name = "John Doe";
$email = "john@example.com";
$age = 30;
$stmt->bind_param("ssi", $name, $email, $age); // "ssi" 表示两个字符串和一个整数

// 执行插入
if ($stmt->execute()) {
    echo "新记录插入成功,ID: " . $stmt->insert_id;
} else {
    echo "Error: " . $stmt->error;
}

// 关闭预处理语句
$stmt->close();

5. 更新数据

php 复制代码
// 准备SQL语句
$sql = "UPDATE users SET age = ? WHERE id = ?";
$stmt = $mysqli->prepare($sql);

// 绑定参数
$newAge = 31;
$id = 1;
$stmt->bind_param("ii", $newAge, $id);

// 执行更新
if ($stmt->execute()) {
    echo "记录更新成功,受影响的行数: " . $stmt->affected_rows;
} else {
    echo "Error: " . $stmt->error;
}

// 关闭预处理语句
$stmt->close();

6. 删除数据

php 复制代码
// 准备SQL语句
$sql = "DELETE FROM users WHERE id = ?";
$stmt = $mysqli->prepare($sql);

// 绑定参数
$id = 1;
$stmt->bind_param("i", $id);

// 执行删除
if ($stmt->execute()) {
    echo "记录删除成功,受影响的行数: " . $stmt->affected_rows;
} else {
    echo "Error: " . $stmt->error;
}

// 关闭预处理语句
$stmt->close();

7. 事务处理

php 复制代码
// 开始事务
$mysqli->begin_transaction();

try {
    // 执行多个SQL操作
    $mysqli->query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
    $mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
    
    // 提交事务
    $mysqli->commit();
    echo "事务执行成功";
} catch (Exception $e) {
    // 回滚事务
    $mysqli->rollback();
    echo "事务失败: " . $e->getMessage();
}

8. 关闭连接

php 复制代码
$mysqli->close();

mysqli与PDO的对比

特性 mysqli PDO
数据库支持 仅MySQL 支持多种数据库(MySQL、PostgreSQL等)
面向对象 支持(也支持过程式) 仅面向对象
预处理语句 支持 支持
错误处理 支持异常模式 支持异常模式
事务处理 支持 支持
跨数据库兼容性 无 高

总结

  • mysqli是专门为MySQL设计的扩展,性能略高。
  • 预处理语句是防止SQL注入的关键,强烈推荐使用。
  • 事务处理可确保数据的一致性。
  • 对于跨数据库项目,建议使用PDO。

以上示例展示了mysqli的基本用法,实际开发中建议结合异常处理和预处理语句,提高代码的安全性和可维护性。

相关推荐
lusklusklusk15 分钟前
Oracle数据库基础之7_备份恢复基础之SCN
数据库·oracle
乃嘿仔23 分钟前
AI 热点日报 · 2026-10-01
开发语言·人工智能·php
ao-weilai1 小时前
MySQL数据库:MySQL基础概要
数据库·mysql
雪碧聊技术1 小时前
从 0 跑通一个最小 RAG Demo:文档切分、向量检索与答案生成
数据库·oracle
喜欢的名字被抢了1 小时前
08-Redis 性能优化篇:快在哪、BigKey、HotKey、慢查询与内存
数据库·redis·性能优化
ai小陈1 小时前
GPU服务器租用部署实战:用systemd守护模型推理服务
运维·服务器·人工智能·ai·php·gpu算力
阳光九叶草LXGZXJ1 小时前
达梦数据库-学习-68-dmasm0X_XXXXXX.log日志激增
linux·运维·数据库·sql·学习
Mortalbreeze1 小时前
MySQL 基础篇(三):一文掌握 MySQL 常见数据类型
linux·服务器·数据库·mysql
青山木1 小时前
秒杀系统设计(一):需求拆解与流量治理
java·数据库·redis·后端·架构
lusklusklusk1 小时前
Oracle数据库基础之8_闪回
数据库·oracle