当前位置: 首页 > news >正文

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

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

1. 连接数据库

面向对象风格
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');// 检查连接是否成功
if ($mysqli->connect_error) {die("连接失败: " . $mysqli->connect_error);
}echo "连接成功";
过程式风格
$conn = mysqli_connect('localhost', 'username', 'password', 'database_name');if (!$conn) {die("连接失败: " . mysqli_connect_error());
}echo "连接成功";

2. 执行查询(SELECT)

// 准备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注入)

// 准备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. 插入数据

// 准备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. 更新数据

// 准备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. 删除数据

// 准备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. 事务处理

// 开始事务
$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. 关闭连接

$mysqli->close();

mysqli与PDO的对比

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

总结

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

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

http://www.lryc.cn/news/584854.html

相关文章:

  • 平板柔光屏与镜面屏的区别有哪些?技术原理与适用场景全解析
  • Linux操作系统从入门到实战:怎么查看,删除,更新本地的软件镜像源
  • Linux权限的概念
  • 一文速览DeepSeek-R1的本地部署——可联网、可实现本地知识库问答(附教程)
  • 飞算Java AI:专为 Java 开发者打造的智能开发引擎
  • Linux:多线程---同步生产者消费者模型
  • 【Linux仓库】命令行参数与环境变量【进程·伍】
  • 【前端】【Echarts】【zrender】从入门到多路径信号流动动画实战
  • 飞算JavaAI:革新Java开发的智能助手
  • Linux kernel devm_gpiod_get()函数详解
  • 彻底解决JavaFx在Linux中文无法正常显示的问题(究其根本原因)
  • 飞书CEO谢欣:挑战巨头,打造AI新时代的Office
  • 锁的艺术:从Mutex到ReentrantLock,掌握并发编程的脉搏
  • 分布式系统高可用性设计-负载均衡与容错机制深度解析
  • Shader面试题100道之(81-100)
  • 模拟实现unordered_map
  • 如何使用 Python 删除 Excel 中的行、列和单元格 – 详解
  • 如何从0开始构建自己的第一个AI应用?(Prompt工程、Agent自定义、Tuning)
  • 格密码--数学基础--02基变换、幺模矩阵与 Hermite 标准形
  • AI金融风控:识别欺诈,量化风险的新利器
  • pandas销售数据分析
  • python 在 Linux CentOS 上安装 playwright 的完整步骤
  • Pandas:常见的转换函数(rename,set_index,reset_index)
  • MD2Doc转换器(基于Python)
  • [Reverse1] Tales of the Arrow
  • 飞算 JavaAI 深度体验:开启 Java 开发智能化新纪元
  • 闲庭信步使用图像验证平台加速FPGA的开发:第八课——图像数据的行缓存
  • Locust 负载测试工具使用教程
  • 为什么选择Selenium自动化测试?
  • [特殊字符]远程服务器配置pytorch环境