首页 > 数据库 > mysql教程 > 使用 PHP SQL 准备语句时如何减少代码重复?

使用 PHP SQL 准备语句时如何减少代码重复?

DDD
发布: 2025-01-01 02:54:09
原创
141 人浏览过

How Can I Reduce Code Repetition When Using PHP SQL Prepared Statements?

使用 PHP SQL 准备语句避免代码重复

简介

准备语句提供了一种强大的技术来防止 SQL 注入攻击并提高查询性能。然而,创建准备好的语句的传统方法,如下所示:

$sql = 'INSERT INTO tasks(task_name, start_date, completed_date) VALUES(:task_name, :start_date, :completed_date)';
$stmt = $this->pdo->prepare($sql);
$stmt->execute([
        ':task_name' => $taskName,
        ':start_date' => $startDate,
        ':completed_date' => $completedDate,
    ]);
登录后复制

在指定字段名称时会导致大量冗余。这种冗余可能会令人沮丧,尤其是在进行更改或维护代码时。本文探讨了三种不同的方法,可以减轻这种重复并增强准备好的语句代码的可读性。

原始 PHP

对于基本插入,一种简单的技术涉及省略查询中的 fields 子句并使用位置占位符:

$data = [$taskName, $startDate, $completedDate];
$sql = 'INSERT INTO tasks VALUES(null, ?, ?, ?)';
$db->prepare($sql)->execute($data);
登录后复制

虽然简单,但此方法可能不适合

辅助函数

另一种方法是创建一个专门用于处理插入的辅助函数。此函数可以根据提供的字段名称和值动态生成查询:

function prepared_insert($conn, $table, $data) {
    $keys = array_keys($data);
    $fields = implode(",", $keys);
    $placeholders = str_repeat('?,', count($keys) - 1) . '?';
    $sql = "INSERT INTO $table ($fields) VALUES ($placeholders)";
    $conn->prepare($sql)->execute(array_values($data));
}
登录后复制

使用此辅助函数简化了插入过程:

prepared_insert($db, 'tasks',[
    'task_name' => $taskName,
    'start_date' => $startDate,
    'completed_date' => $completedDate,
]);
登录后复制

Baby ORM

最先进的方法涉及实现面向对象编程(OOP)解决方案,通常称为作为“婴儿 ORM”。此方法定义了一个基类,其中包含表操作的通用方法和各个表的特定类:

class UserGateway extends BasicTableGateway {
    protected $table = 'gw_users';
    protected $fields = ['email', 'password', 'name', 'birthday'];
}
登录后复制

通过此设置,可以在不显式指定字段名称的情况下执行插入:

$data = [
    'email' => '[email protected]',
    'password' => 123,
    'name' => 'Fooster',
];

$userGateway = new UserGateway($pdo);

$id = $userGateway->create($data);
登录后复制

OOP解决方案可以显着提高代码可维护性,减少重复,并增强整体开发体验。

以上是使用 PHP SQL 准备语句时如何减少代码重复?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板