当前位置: 首页 > 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.dtcms.com/a/273896.html

相关文章:

  • springboot生成pdf方案之dot/html/图片转pdf三种方式
  • 【实用IP查询工具】IP数据云-IP地址查询离线库使用方案
  • 【AI大模型】RAG系统组件:向量数据库(ChromaDB)
  • 《数据库》MySQL备份回复
  • 【数据库基础 1】MySQL环境部署及基本操作
  • Ntfs!NtfsCheckpointVolume函数分析之Lfcb->RestartArea的变更和什么时候RestartArea写回文件的关系
  • 两台电脑通过网线直连形成局域网,共享一台wifi网络实现上网
  • Cesium实战:交互式多边形绘制与编辑功能完全指南(最终修复版)
  • Unity3d程序运行显示debugger信息
  • c/c++拷贝函数
  • 【Qt 学习之路】Qt Android开发环境搭建:Ubuntu的Vmware虚拟机中的踩坑实录
  • Arcgis连接HGDB报错
  • python的类型注解讲解
  • c++设计模式:抽象工厂模式
  • 【unity游戏开发——优化篇】Unity6.2新功能介绍——Mesh LOD的使用
  • Redis数据类型之list
  • Vue3的组件通信方式
  • (1-7-2)Mysql 数据表的相关操作
  • ollama大模型spring单机集成
  • 输入输出练习
  • C++入门基础篇(二)
  • 【C语言网络编程】HTTP 客户端请求(域名解析过程)
  • P9755 [CSP-S 2023] 种树
  • 浮点测试初探
  • Genus:设计信息结构以及导航方式(路径种类)
  • Java中的泛型继承
  • 【C语言进阶】带你由浅入深了解指针【第四期】:数组指针的应用、介绍函数指针
  • 【Spring Boot】Spring Boot 4.0 的颠覆性AI特性全景解析,结合智能编码实战案例、底层架构革新及Prompt工程手册
  • mysql的LIMIT 用法
  • 1 APP-OneNET 生成token密钥