【瓜分奖池】PHP基础第五十一章:MySQL数据库基础、SQL注入与防注入

本章系统讲解 PHP 操作 MySQL 的三种方式,以及 SQL 注入的原理与五种防御方案,帮助开发者写出安全高效的数据库代码。

一、PHP 操作 MySQL 的三种方式

  1. MySQL(原始扩展):已废弃,新版本 PHP 中直接移除。
  2. MySQLi:支持面向对象与面向过程,但仅适配 MySQL。
  3. 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 注入产生条件

  1. 前端用户可控输入
  2. 后端直接拼接变量到 SQL
  3. 没有过滤、没有转义、没有预处理

八、防 SQL 注入的五种方案

  1. 使用 PDO/MySQLi 预处理语句(最根本)
  2. 禁止直接拼接用户参数到 SQL
  3. 使用 mysqli_real_escape_string 转义特殊字符
  4. 正则过滤敏感字符:' " # or and union
  5. 数据库账号最小权限,不授予删改高权限

九、本章核心要点

  • 三种数据库操作方式,优先 PDO,弃用旧 MySQL 扩展
  • 增删改查固定套路,掌握 MySQLi 基础用法
  • SQL 注入根源:直接拼接用户输入
  • 开发必须做防注入,优先使用预处理
  • 操作完建议关闭数据库连接,节省资源

示意图