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

相关推荐
JIngJaneIL几秒前
财务管理|基于SprinBoot+vue的个人财务管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·财务管理系统
JIngJaneIL1 小时前
口腔健康系统|口腔医疗|基于java和小程序的口腔健康系统小程序设计与实现(源码+数据库+文档)
java·数据库·spring boot·小程序·论文·毕设·口腔医疗小程序
白帽子黑客罗哥1 小时前
常见Web安全漏洞全解析:从原理到防御的实战指南
数据库·web安全·渗透测试·漏洞利用·权限提升
寒山李白3 小时前
IDEA连接MySQL服务器数据库指南
java·数据库·mysql·intellij-idea·idea·database
亿坊电商6 小时前
PHP后端项目中多环境配置管理:开发、测试、生产的优雅解决方案!
服务器·数据库·php
韩立学长6 小时前
基于Springboot的影视评论网站的设计与实现58py6238(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
未来之窗软件服务6 小时前
未来之窗昭和仙君(四十七)开发商品进销存——东方仙盟筑基期
数据库·进销存·仙盟创梦ide·东方仙盟·昭和仙君·东方仙盟架构
pedestrian_h7 小时前
操作系统-线程
android·java·开发语言
IDOlaoluo7 小时前
TinyRDM 1.2.3 Windows版安装教程(附Redis客户端下载及详细步骤)
数据库·redis·缓存
小光学长8 小时前
基于微信小程序的背单词系统x1o5sz72(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·微信小程序·小程序