HoRain云--PHP操作MySQL终极指南:mysqli vs PDO实战对比
HoRain 云小助手个人主页⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。目录⛳️ 推荐准备工作创建测试数据方案一使用 mysqli 扩展面向对象风格方案二使用 PDO 扩展推荐 ✨ 带条件的查询防 SQL 注入必看 总结该选 mysqli 还是 PDO在 PHP 中读取 MySQL 数据本质上就是让 PHP 充当“传声筒”建立连接 →发送 SQL 查询 →接收结果 →解析展示。目前主流的 PHP 操作 MySQL 方式有两种mysqliMySQL Improved和PDOPHP Data Objects。下面我为你拆解这两种方式的完整实战代码。准备工作创建测试数据为了让你能直接复制运行我们先假设有一个名为test_db的数据库里面有一张users表CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL ); INSERT INTO users (name, email) VALUES (张三, zhangsanexample.com), (李四, lisiexample.com);方案一使用 mysqli 扩展面向对象风格mysqli是早期mysql扩展的改良版只针对 MySQL 数据库。它性能不错且对新手来说逻辑非常直白。?php // 1. 创建数据库连接 $host localhost; $user root; $pass your_password; $db test_db; $conn new mysqli($host, $user, $pass, $db); // 检查连接是否成功 if ($conn-connect_error) { die(连接失败: . $conn-connect_error); } // 2. 编写 SQL 查询语句 $sql SELECT id, name, email FROM users; $result $conn-query($sql); // 3. 判断并解析结果集 if ($result $result-num_rows 0) { // 循环遍历每一行数据 while ($row $result-fetch_assoc()) { echo ID: . $row[id] . - 姓名: . $row[name] . - 邮箱: . $row[email] . br; } } else { echo 没有查询到数据; } // 4. 释放结果集并关闭连接 $result-free(); $conn-close(); ?方案二使用 PDO 扩展推荐 ✨PDO是 PHP 官方推荐的数据访问层。它的牛逼之处在于支持多种数据库MySQL、PostgreSQL、SQLite等且内置强大的预处理机制是防止 SQL 注入的终极武器。?php // 1. 创建 PDO 连接实例 $host mysql:hostlocalhost;dbnametest_db;charsetutf8mb4; $user root; $pass your_password; try { $pdo new PDO($host, $user, $pass); // 设置 PDO 错误模式为异常方便调试 $pdo-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die(数据库连接失败: . $e-getMessage()); } // 2. 准备并执行 SQL (使用预处理防止 SQL 注入) $sql SELECT id, name, email FROM users; $stmt $pdo-prepare($sql); $stmt-execute(); // 3. 获取结果并遍历 // fetch(PDO::FETCH_ASSOC) 每次取一行作为关联数组返回 while ($row $stmt-fetch(PDO::FETCH_ASSOC)) { echo ID: . $row[id] . - 姓名: . $row[name] . - 邮箱: . $row[email] . br; } // 4. 关闭连接 (可选PHP 脚本执行完毕会自动关闭) $pdo null; ? 带条件的查询防 SQL 注入必看千万不要直接用字符串拼接用户的输入比如$_GET[id]到 SQL 里这会被黑客轻松 SQL 注入拖库正确的做法以 PDO 为例// 假设 URL 是 xxx.php?id1 $userId $_GET[id] ?? 0; // 使用命名占位符 :id $sql SELECT * FROM users WHERE id :id; $stmt $pdo-prepare($sql); // 绑定参数并执行 $stmt-execute([id $userId]); $user $stmt-fetch(PDO::FETCH_ASSOC); print_r($user);(注mysqli 也有预处理功能prepare()和bind_param()但语法相对繁琐这也是为什么大家更偏爱 PDO 的原因。) 总结该选 mysqli 还是 PDO特性PDOmysqli数据库支持多种数据库 (MySQL, SQLite, PG等)仅 MySQLAPI 风格统一、优雅、面向对象支持面向对象和过程化预处理支持原生支持非常强大支持但稍显冗长学习曲线稍微陡峭一点相对简单直接最终建议如果是新项目强烈建议直接上手 PDO。它不仅能让你写出更安全、更优雅的代码而且万一哪天老板心血来潮要换数据库你的代码几乎不用改❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧