🗣 Wd提问: php连接mysql 预处理
🤖 Ai回答: 在 PHP 中使用预处理语句(Prepared Statements)连接 MySQL 数据库,可以有效防止 SQL 注入攻击,并提升性能。PHP 从 5.2.0 开始支持 MySQLi 扩展(面向对象和过程式两种风格),从 PHP 7.0+ 起推荐使用 MySQLi 或 PDO。
下面分别介绍 MySQLi 预处理 和 PDO 预处理 的用法:
✅ 方法一:使用 MySQLi(面向对象风格)
1、连接数据库
php
<?php
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';
// 创建连接
$mysqli = new mysqli($host, $username, $password, $dbname);
// 检查连接
if ($mysqli-connect_error) {
die(连接失败: 、$mysqli-connect_error);
}
echo 连接成功!\n;
?
2、使用预处理语句插入数据
php
$sql = INSERT INTO users (name, email) VALUES (?, ?);
$stmt = $mysqli-prepare($sql);
// 绑定参数(s = string, i = integer, d = double)
$stmt-bind_param(ss, $name, $email);
$name = 张三;
$email = zhangsan@65.hk;
// 执行语句
if ($stmt-execute()) {
echo 插入成功!\n;
} else {
echo 插入失败: 、$stmt-error;
}
$stmt-close();
$mysqli-close();
3、使用预处理语句查询数据
php
$sql = SELECT id, name, email FROM users WHERE email = ?;
$stmt = $mysqli-prepare($sql);
$stmt-bind_param(s, $searchEmail);
$searchEmail = zhangsan@65.hk;
$stmt-execute();
$result = $stmt-get_result();
while ($row = $result-fetch_assoc()) {
echo ID: 、$row['id'] 、, 名称: 、$row['name'] 、, 邮箱: 、$row['email'] 、\n;
}
$stmt-close();
$mysqli-close();
✅ 方法二:使用 PDO(推荐跨数据库兼容)
1、连接数据库
php
<?php
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';
try {
$pdo = new PDO(mysql:host=$host;dbname=$dbname;charset=utf8mb4, $username, $password);
$pdo-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 连接成功!\n;
} catch (PDOException $e) {
die(连接失败: 、$e-getMessage());
}
?
2、使用预处理语句插入数据
php
$sql = INSERT INTO users (name, email) VALUES (:name, :email);
$stmt = $pdo-prepare($sql);
$name = 李四;
$email = lisi@65.hk;
$stmt-bindParam(':name', $name);
$stmt-bindParam(':email', $email);
if ($stmt-execute()) {
echo 插入成功!\n;
} else {
echo 插入失败。\n;
}
$stmt-closeCursor(); // 可选,释放资源
3、使用预处理语句查询数据
php
$sql = SELECT id, name, email FROM users WHERE email = :email;
$stmt = $pdo-prepare($sql);
$email = lisi@65.hk;
$stmt-bindParam(':email', $email);
$stmt-execute();
$result = $stmt-fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
echo ID: 、$row['id'] 、, 名称: 、$row['name'] 、, 邮箱: 、$row['email'] 、\n;
}
$stmt-closeCursor();
📌 总结对比
| 特性 | MySQLi | PDO |
| 支持多数据库 | ❌ 仅 MySQL | ✅ 支持多种数据库(MySQL、PostgreSQL、SQLite等) |
| 参数绑定 | `bind_param()` | `bindParam()` 或 `bindValue()` |
| 更灵活 | ❌ 仅 MySQL | ✅ 支持更多特性如命名参数、数组等 |
| 安全性 | ✅ 防止 SQL 注入 | ✅ 防止 SQL 注入 |
| 推荐程度 | ✅ 适合纯 MySQL 项目 | ✅✅✅ 推荐用于多数据库或大型项目 |
⚠️ 注意事项
1、始终使用预处理语句,避免拼接 SQL 字符串。
2、关闭资源:执行完后记得调用 `$stmt-close()` 或 `$stmt-closeCursor()`。
3、异常处理:使用 try-catch 捕获错误,特别是使用 PDO 时。
4、编码设置:连接时指定字符集,如 `charset=utf8mb4`,避免乱码。
💡 小贴士:如何查看 MySQLi/PDO 错误?
MySQLi:`$mysqli-error`
PDO:`$pdo-errorInfo()`
如果你希望更简洁的写法,也可以封装成类或工具函数。
✅ 建议:新项目推荐使用 PDO + 面向对象风格,兼容性强、易维护;旧项目若只用 MySQL,MySQLi 也足够好。
如有具体需求(比如批量插入、更新、删除),可继续提问 😊
📣 商家广告:





0
IP地址: 156.242.234.190
搜索次数: 1
提问时间: 2025-11-12 02:01:42
🛒 域名购买:
c-a.com.cn
7mt.net
pai.cx
46.gold
kou.red
82.gs
xbhd.cn
665.net.cn
wzsx.net
oz.gs
❓️ 热门提问:
香港粤语金曲
vps香港主机
dns常用服务器地址
便宜又好用的香港云服务器
福州网站制作网站
win日志服务器搭建
免费注册网站有哪些
台式电脑主机配置及价格
站群系统搭建程序
seo优化教程视频教程ppt
豌豆Ai站群搜索引擎系统
🌐 域名评估:
ntnm.cn
le.cq.cn
aaaa.cafe
english.gd.cn
vtol.gz.cn
xphone.fan
vtol.rent
lpot.cn
rdnk.cn
tobq.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
过期域名抢注
贵阳软件开发公司
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。