0

这是一个设计问题,我一直在考虑这个问题。

我想将 SQL 查询分隔在独立文件或内存位置中(以便更快地访问)。

查询将像这样存储:

SELECT .... WHERE col = ?

当需要查询时,它会从它的位置获取。

一个(不易维护的)示例替代方案是:

$sql = "select ..... where col=". prevent_injection($val) ." and ....";

好处:

  • 查询的完全分离:Web 开发人员和 DBA 可以根据他们的角色专门工作
  • 更清洁的查询

缺点:

  • 需要在每个方面进行一些协调?意味着,这在大团队中无论如何都是必要的
  • 在运行时获取 SQL 可能会减慢速度,但可以使用缓存

对这种方法有任何反馈吗?

4

2 回答 2

0

通常我使用两种方法来防止 SQL 注入。

ORM 像 propel,它自己处理所有的 SQL 注入问题。你不需要关心细节。并且有几个 MVC 框架正在使用 ORM。

PHP 数据对象(又名:PDO)扩展。您可以编写如下代码。它本身也处理所有的 SQL 注入问题

    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':value', $value);
    $stmt->执行();

根据你想要的好处,我建议你可以使用 PDO 来实现清晰的 SQL 并保持轻量级。

于 2013-08-15T08:30:43.443 回答
0

您应该看看 MVC(模型视图控制器)架构模式。它将允许您实现您的目标:数据、逻辑和表示的分离。

在 MVC 中,您的模型将处理所有与 SQL 相关的逻辑,因此其他两层将永远不必处理查询。

看看实现 MVC 模式的 PHP 框架,它们将大大简化将此模式应用到您的项目中。我个人最喜欢的是Laravel 4,但还有很多其他的,例如FuelPHPCodeIgniterCakePHP等。

这些框架中的大多数还具有缓存机制作为奖励,它们能够利用其他方式来加速您的 Web 应用程序:例如 Redis 和 Memcache。

于 2013-08-15T07:54:05.877 回答