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的基本用法,实际开发中建议结合异常处理和预处理语句,提高代码的安全性和可维护性。

相关推荐
JaguarJack12 分钟前
别再只用数组了,这 10 种 PHP 数据结构值得了解
后端·php·服务端
2601_957084843 小时前
2026年生产型服装供应链SCM系统丨水洗参数、产能与验收节点架构
数据库·scm·服装供应链系统·服装scm·服装供应链
IvorySQL8 小时前
PostgreSQL 日报|恢复期 COPY TO 未日志表修复(10 月 21 日)
数据库·postgresql·区块链
贝猫说python10 小时前
大模型比赛2.3智能体开发(工具调用智能问答助手)
数据库·oracle
许彰午11 小时前
28-ORA-01110数据文件读取错误
数据库·oracle
凯凯姜11 小时前
MySQL 联合索引设计与索引失效
数据库·mysql
猫咪很可爱12 小时前
Oracle TEMP 表空间不足(ORA-01652)问题分析与优化实践
数据库·oracle
九零HTTP13 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
Data-Miner13 小时前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
ITxiaobing202314 小时前
海外广告投放的 IP 定位服务怎么选?一份基于实测数据的选型参考
网络协议·tcp/ip·php