【瓜分奖池】PHP基础第五十一章:MySQL数据库基础、SQL注入与防注入
本章系统讲解 PHP 操作 MySQL 的三种方式,以及 SQL 注入的原理与五种防御方案,帮助开发者写出安全高效的数据库代码。
一、PHP 操作 MySQL 的三种方式
- MySQL(原始扩展):已废弃,新版本 PHP 中直接移除。
- MySQLi:支持面向对象与面向过程,但仅适配 MySQL。
- PDO:支持多种数据库、预处理、事务,企业开发首选。
二、数据库操作固定流程
连接数据库 → 设置字符集 → 编写 SQL → 执行 SQL → 处理结果 → 关闭连接
三、MySQLi 连接数据库示例
php
1
2
$link = mysqli_connect('localhost', 'root', '', 'test');
mysqli_set_charset($link, 'utf8');
四、增删改基础操作
1. 新增
php
1
2
3
$sql = "insert into user(name,age) values('张三',20)";
mysqli_query($link,$sql);
echo mysqli_insert_id($link);
2. 修改
php
1
2
3
$sql = "update user set age=22 where id=1";
mysqli_query($link,$sql);
echo mysqli_affected_rows($link);
3. 删除
php
1
2
$sql = "delete from user where id=1";
mysqli_query($link,$sql);
五、查询数据
1. 单条查询
php
1
2
3
4
$sql = "select * from user where id=1";
$res = mysqli_query($link,$sql);
$row = mysqli_fetch_assoc($res);
echo $row['name'];
2. 多条查询
php
1
2
3
4
5
6
$sql = "select * from user";
$res = mysqli_query($link,$sql);
$arr = [];
while($row = mysqli_fetch_assoc($res)){
$arr[] = $row;
}
六、SQL 注入原理
- 直接将用户输入拼接进 SQL 语句
- 恶意输入示例:
' or 1=1 # - 拼接后 SQL 逻辑被篡改,可绕过登录、查全表数据
- 危害:脱库、篡改数据、越权访问
七、SQL 注入产生条件
- 前端用户可控输入
- 后端直接拼接变量到 SQL
- 没有过滤、没有转义、没有预处理
八、防 SQL 注入的五种方案
- 使用 PDO/MySQLi 预处理语句(最根本)
- 禁止直接拼接用户参数到 SQL
- 使用
mysqli_real_escape_string转义特殊字符 - 正则过滤敏感字符:
' " # or and union - 数据库账号最小权限,不授予删改高权限
九、本章核心要点
- 三种数据库操作方式,优先 PDO,弃用旧 MySQL 扩展
- 增删改查固定套路,掌握 MySQLi 基础用法
- SQL 注入根源:直接拼接用户输入
- 开发必须做防注入,优先使用预处理
- 操作完建议关闭数据库连接,节省资源
