PHP PDO安全使用需把握四大环节:一、连接时设ERRMODE_EXCEPTION和UTF8MB4编码;二、预处理只绑定值,禁拼接SQL;三、按需选用fetch/fetchAll等取结果方法;四、事务须配try-catch与rollback兜底。

PHP PDO 是操作数据库最安全、最灵活的方式之一,核心优势在于统一接口 + 预处理防注入。真正用好它,关键不是记住语法,而是理解 连接管理、预处理逻辑、错误处理、事务控制 这四个环节怎么配合。
一、PDO 连接不是“连上就行”,要设对选项
PDO 默认的错误模式是静默失败(PDO::ERRMODE_SILENT),这意味着 SQL 写错了、字段不存在、类型不匹配,它一声不吭只返回 false —— 你根本不知道哪出问题。必须第一时间改掉:
- 设置 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,让所有错误抛出异常,便于定位
- 加上 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,默认以关联数组取数据,不用每次写 fetch(PDO::FETCH_ASSOC)
- 中文乱码?在 DSN 里加 ;charset=utf8mb4(注意是 utf8mb4,不是 utf8),并确保数据库/表本身也是该编码
示例连接代码:
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4';<br>$pdo = new PDO($dsn, $user, $pass, [<br> PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,<br> PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,<br>]);
登录后复制
二、预处理不是“用了就安全”,得看怎么传参
预处理防 SQL 注入的前提是:**所有用户数据都走参数绑定,绝不拼接字符串**。常见错误有三种:
立即学习“PHP免费学习笔记(深入)”;
- 把表名、字段名、ORDER BY 条件当参数绑定 → 不行!PDO 只允许绑定 值(value),不能绑定标识符(identifier)
- 用双引号拼接变量再 prepare → 比如 "SELECT * FROM user WHERE id = $id" → 完全绕过预处理,极度危险
- 绑定参数时类型写错,比如用 PDO::PARAM_INT 绑定一个含字母的字符串 → 可能被截断或报错
正确做法:
标签: mysql php 编码 大数据 中文乱码 作用域 内存占用
还木有评论哦,快来抢沙发吧~