PHP与数据库交互实操:连接方法+SQL注入防范+系统数据库解析

在Web后端开发中,PHP与数据库的交互是核心环节------无论是用户登录、数据存储还是信息查询,都需要通过PHP脚本操作数据库完成。本文将详细讲解PHP与MySQL数据库的交互步骤,重点剖析常见的SQL注入漏洞风险及防范方法,同时介绍MySQL系统数据库的核心作用,助力新手快速掌握后端数据交互技巧。

一、PHP与MySQL数据库交互完整步骤

PHP与MySQL交互主要分为4个核心步骤:建立连接、接收输入、执行SQL、处理结果,每一步都有明确的实操代码,新手可直接复制修改使用,下面代码以$_POST为例。

1. 建立数据库连接

使用mysqli_connect()函数建立PHP与MySQL的连接,需配置数据库地址、账号、密码和目标数据库名,同时添加连接测试,避免连接失败导致后续操作异常。

php 复制代码
<?php
// 定义数据库连接参数
$db_host = '127.0.0.1'; // 本地数据库地址(Windows可替换为localhost)
$db_user = 'root';      // 数据库默认账号(通常为root)
$db_pass = 'root';      // 替换为自己的数据库密码
$db_name = 'school';    // 要连接的目标数据库名

// 建立数据库连接
$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);

// 测试连接是否成功,失败则终止脚本并提示错误
if (!$conn) {
    die("数据库连接失败: " . mysqli_connect_error());
}
?>
 

2. 接收用户输入

通过PHP超全局变量$_POST$_GET,接收用户在网页表单中输入的信息(如账号、密码),并存储到对应变量中。

php 复制代码
<?php
// 接收用户通过POST方法提交的账号数据
$name = $_POST['name'];

// 接收用户通过POST方法提交的密码数据  
$pwd = $_POST['password'];
?>
 

3. 执行SQL语句

拼接SQL查询语句,使用mysqli_query()函数将SQL指令发送给数据库,获取执行结果。以用户登录查询为例,核心是根据用户输入的账号和密码,查询数据库中是否存在对应记录。

php 复制代码
<?php
// 拼接SQL查询语句(注意替换"对应数据库名"为实际数据表名,如users)
$sql = "SELECT * FROM 对应数据库名 WHERE name='$name' AND password='$pwd'";

// 执行SQL语句,并将结果赋值给$result变量
$result = mysqli_query($conn, $sql);
?>
 

4. 处理查询结果

根据SQL执行结果,向用户反馈操作结果(如登录成功/失败),操作完成后需关闭数据库连接,释放资源。

php 复制代码
<?php
// 判断查询结果中是否存在数据(大于0即为存在)
if (mysqli_num_rows($result) > 0) {
    // 取出查询到的用户信息(关联数组形式)
    $user_info = mysqli_fetch_assoc($result);
    // 输出登录成功提示
    echo "登录成功!欢迎你:" . $user_info['name'];
} else {
    // 无匹配数据,输出登录失败提示
    echo "登录失败:用户名或密码错误";
}
// 关闭数据库连接,避免资源浪费
mysqli_close($conn);
?>
 

二、核心风险:SQL注入漏洞(重点防范)

上述基础交互代码存在一个致命安全漏洞------SQL注入。由于代码直接将用户输入的$name$pwd拼接到SQL语句中,未做任何过滤处理,攻击者可通过输入恶意SQL指令,篡改查询逻辑,实现非法登录、窃取数据等攻击。

1. SQL注入攻击原理(以登录为例)

攻击者在账号输入框中输入恶意指令:1' or 1=1 #,拼接后的SQL语句会发生篡改,原本的查询逻辑被破坏。

sql 复制代码
-- 正常查询语句(安全)
SELECT * FROM users WHERE name='$name' AND password='$pwd';

-- 恶意注入示例(通过注释绕过验证)
SELECT * FROM users WHERE name='' or 1=1#' AND password='$pwd';
 

攻击逻辑解析:

  • ' 与SQL语句中原本的' 闭合,使name字段的条件变为空字符串。

  • or 1=1 表示"或"逻辑,1=1是恒真条件,因此整个WHERE条件恒真。

  • # 是SQL注释符,将后面的AND password='$pwd' 注释掉,使密码验证失效。

最终结果:数据库会查询到所有用户记录,攻击者无需正确账号密码即可登录,若添加limit指令,还可窃取多个用户信息。

2. SQL注入防范方法

核心原则:对用户输入的内容进行严格过滤或转译,禁止直接拼接SQL语句。重点过滤或转译以下特殊字符/关键字:

limit、or、'、"、#、-- 等,可使用PHP内置函数mysqli_real_escape_string()对用户输入进行转译,避免恶意指令被执行。

三、MySQL系统数据库解析

MySQL内置了3个核心系统数据库,各自承担不同的功能,了解这些系统数据库,有助于更好地管理数据库和排查问题。

1. information_schema(核心系统库)

这是MySQL中最常用的系统数据库,专门存储整个MySQL的元数据信息,包括所有数据库的库名、数据表名、字段名、数据类型等。

核心表介绍:

  • SCHEMATA:存储所有数据库的名称。

  • TABLES:存储所有数据表的信息(所属数据库、表名等)。

  • COLUMNS:存储所有数据表的字段信息(字段名、数据类型、所属表等)。

提示:information_schema是SQL注入攻击中,攻击者窃取数据库结构的核心目标。

2. performance_schema

主要用于监控MySQL的运行性能、资源消耗情况及SQL语句执行统计,可帮助开发者排查数据库性能问题(如慢查询、资源占用过高)。

3. mysql

用于存储MySQL的核心配置信息,包括用户账户、用户权限、角色、密码(加密存储)、主机访问权限等,是MySQL权限管理的核心数据库,修改此数据库可能导致数据库无法正常使用,需谨慎操作。

四、实操总结

PHP与数据库交互的核心是"连接-接收-执行-处理"四步,新手可先掌握基础代码,再重点关注SQL注入漏洞------这是后端开发中最常见、最危险的安全漏洞之一。同时,了解MySQL系统数据库的作用,能帮助我们更好地管理数据库、排查问题。

建议新手在实操时,先完成基础交互流程,再添加SQL注入防范措施,多测试、多调试,逐步养成安全开发的习惯。

相关推荐
2401_871696522 小时前
如何保证MongoDB文档的数据质量_JSON Schema验证规则配置
jvm·数据库·python
z4424753262 小时前
SQL利用JOIN实现数据关联分析的实操_关联维度表补全信息
jvm·数据库·python
lUie INGA2 小时前
MySQL事件功能简介
数据库·mysql
maqr_1102 小时前
SQL如何快速提取分组中最晚时间点数据_结合窗口函数实现
jvm·数据库·python
Shorasul2 小时前
mysql如何限制特定表的最大存储空间_通过ALTER TABLE设置MAX_ROWS
jvm·数据库·python
21439652 小时前
如何存储MongoDB的爬虫抓取数据_动态字段与无模式宽容度.txt
jvm·数据库·python
m0_748920362 小时前
CSS如何实现网格内绝对定位_利用Grid的relative属性层级控制
jvm·数据库·python
qq_342295822 小时前
golang如何优化磁盘IO性能_golang磁盘IO性能优化思路
jvm·数据库·python
weixin_424999362 小时前
MySQL中如何使用CAST实现类型转换_MySQL数据类型转换技巧
jvm·数据库·python