温锦文欧普厨电及净水器总代理 发表于 2026-2-10 19:14:06

[后端代码审计] PHP 与 MySQL交互

前言

​ PHP(Hypertext Preprocessor)是一种开源的脚本语言,紧张用于Web开发,特殊是服务器端编程。是学习网络安全须要把握的一门语言。
函数速查:
函数分析mysqli_connect( )与MySQL数据库创建毗连mysqli_close( )关闭与MySQL数据库的毗连mysqli_connect_errno( )返回与MySQL数据库创建毗连错误时的错误编号mysqli_connect_error( )返回与MySQL数据库创建毗连错误时的错误信息mysqli_query( )实行SQL语句mysqli_errno( )返回实行SQL语句错误时的错误编号mysqli_error( )返回实行SQL语句错误时的错误信息mysqli_fetch_assoc( )从效果集对象中取数据,按条取数据1. 情况预备

在开始之前,请确保你已经安装了 PHP 和 MySQL,而且已启动了干系服务。
假如没有安装摆设,可以查察文章 LAMP 情况搭建保姆级教学(Apache + MySQL + PHP)
PHP与MySQL交互的过程可以分为4步:


[*]创建与MySQL毗连
[*]实行SQL语句,返回效果集对象
[*]从效果集对象中获取数据
[*]关闭与MySQL毗连
2. 毗连 MySQL 数据库

2.1 使用 MySQLi 扩展

MySQLi 是 PHP 提供的扩展之一,支持面向过程和面向对象的方式毗连 MySQL 数据库。
2.1.1 面向过程的方式

示例:
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";

// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检查连接
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}
echo "连接成功";
表明: 使用 mysqli_connect 函数毗连数据库,若毗连失败则输堕落误信息。
2.1.2 面向对象的方式

示例:
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
表明: 使用 new mysqli 创建一个数据库毗连对象,查抄毗连是否乐成。
3. 实行 SQL 查询

3.1 查询数据

示例:
$sql = "SELECT id, name, email FROM users";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    // 输出数据
    while ($row = mysqli_fetch_assoc($result)) {
      echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
    }
} else {
    echo "0 结果";
}
表明: 使用 mysqli_query 实行 SELECT 查询,mysqli_fetch_assoc 逐行获取效果数据。
3.1.1 效果集对象操纵

mysqli_fetch_assoc是效果集对象操纵函数,下面是对效果集对象操纵函数的分析:
函数速查:
函数分析mysqli_fetch_row( )以索引数组的方式获取一条记载的数据mysqli_fetch_assoc( )以关联数组的方式获取一条记载的数据mysqli_fetch_array( )以索引数组或关联数组的方式获取一条记载的数据mysqli_fetch_all( )以索引数组或关联数组的方式获取全部记载的数据mysqli_fetch_rows( )获取效果集对象中数据条数mysqli_fetch_result( )开释一个效果集干系的内存//获取结果集对象中数据条数
var_dump(mysqli_fetch_rows($results));
//以关联数组的方式获取记录的数据
while($result = mysqli_fetch_assoc($results)){
    var_dump($result);
}
//使用表格的形式
while($result = mysqli_fetch_assoc($results)){
    echo "<tr>";
    echo "<td>"{$result['user_id']}"</td>"
      "<td>"{$result['user_name']}"</td>"
      "<td>"{$result['last_name']}"</td>"
      "<td>"{$result['user']}"</td>"
      "<td>"{$result['password']}"</td>";
    echo "</tr>";
}
3.2 插入数据

示例:
$sql = "INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com')";

if (mysqli_query($conn, $sql)) {
    echo "新记录插入成功";
} else {
    echo "错误: " . $sql . "<br>" . mysqli_error($conn);
}
表明: 使用 mysqli_query 实行 INSERT 语句,将数据插入数据库表。
3.3 更新数据

示例:
$sql = "UPDATE users SET email='newemail@example.com' WHERE id=1";

if (mysqli_query($conn, $sql)) {
    echo "记录更新成功";
} else {
    echo "错误: " . $sql . "<br>" . mysqli_error($conn);
}
表明: 使用 mysqli_query 实行 UPDATE 语句,更新数据库表中的数据。
3.4 删除数据

示例:
$sql = "DELETE FROM users WHERE id=1";

if (mysqli_query($conn, $sql)) {
    echo "记录删除成功";
} else {
    echo "错误: " . $sql . "<br>" . mysqli_error($conn);
}
表明: 使用 mysqli_query 实行 DELETE 语句,删除指定的记载。
4. 关闭毗连

示例:
mysqli_close($conn);
表明: 使用 mysqli_close 关闭数据库毗连。
5. 使用 PDO 扩展

PDO(PHP Data Objects)是另一种毗连数据库的方式,支持多种数据库范例,提供了更强大的功能和更好的安全性。
5.1 创建 PDO 毗连

示例:
$dsn = "mysql:host=localhost;dbname=testdb";
$username = "root";
$password = "";

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "连接成功";
} catch (PDOException $e) {
    echo "连接失败: " . $e->getMessage();
}
表明: 使用 new PDO 创建毗连对象,设置错误模式为非常。
5.2 实行 SQL 查询

示例:
$sql = "SELECT id, name, email FROM users";
$stmt = $pdo->query($sql);

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
表明: 使用 PDO 的 query 方法实行 SELECT 查询,fetch 方法逐行获取数据。
5.3 使用预处置惩罚语句

示例:
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $pdo->prepare($sql);

$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);

$name = '李四';
$email = 'lisi@example.com';
$stmt->execute();
表明: 使用 PDO 预处置惩罚语句进步安全性,防止 SQL 注入。
6. 错误处置惩罚

在举行数据库操纵时,处置惩罚错误优劣常紧张的。使用 PDO 的非常处置惩罚机制或 MySQLi 的错误信息来处置惩罚和调试错误。
6.1 使用 MySQLi 错误处置惩罚

示例:
if (!$result) {
    echo "错误: " . mysqli_error($conn);
}
6.2 使用 PDO 错误处置惩罚

示例:
try {
    // 数据库操作
} catch (PDOException $e) {
    echo "错误: " . $e->getMessage();
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
页: [1]
查看完整版本: [后端代码审计] PHP 与 MySQL交互