这是一个设计问题,我一直在思考这个问题。
我想在独立文件或内存位置内分离SQL查询(以便更快地访问)。
查询将按如下方式存储:
SELECT .... WHERE col = ?
当需要查询时,它将从其位置获取。
(不太可维护的)示例替代方案是:
$sql = "select ..... where col=". prevent_injection($val) ." and ....";
优点:
缺点:
有关此方法的任何反馈意见?
答案 0 :(得分:0)
您应该看一下MVC(模型视图控制器)架构模式。它将使您实现目标:数据,逻辑和表示的分离。
在MVC中,您的模型将处理所有与SQL相关的逻辑,因此其他两个层将永远不必处理查询。
看看实现MVC模式的PHP框架,它们将大大简化将此模式应用于您的项目。我个人最喜欢的是Laravel 4,但还有很多其他内容,例如FuelPHP,CodeIgniter,CakePHP等。
这些框架中的大多数还具有缓存机制作为奖励,并且他们能够利用其他方法来加速您的Web应用程序:例如Redis和Memcache。
答案 1 :(得分: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->execute();
根据您想要的好处,我建议您可以使用PDO来清除SQL并保持其轻量级。