预处理和安全

您正在阅读旧版文档,新版文档已迁移至 [https://document.pescms.com]

目录

尽管PESCMS使用了PDO作为数据库连接方式,可PDO真正的安全在于SQL语句使用了预处理。若不使用预处理,那么安全纯粹痴人说梦话。

占位符

预处理的核心就是占位符。SQL语句中,每一个占位符都是唯一的,不能同名!一个占位符绑定一个值!占位符的名称可以用任何名称定义,看你喜欢。当然,我们还是建议使用有意义的占位符进行表示。

UPDATE table SET user_id = :update_id WHERE user_id = :id;
//最终生成的SQL
UPDATE table SET user_id = '1' WHERE user_id = '1' ;

占位符数值提交

PESCMS提供的增删查改方法:find()、select()、insert()、update()、delete() 第一个参数为占位符的数值数组。下面是一些示例用法

$this->db('user)->where('user_id = :user_id')->find(array('user_id' => $this->g('uid')));

$this->db('doc')->insert(array('doc_title' => '新文档', 'doc_tree_id' => '1'));

原生SQL方法 fetch()、getAll()、query() 第一个参数为SQL语句,第二个参数为占位符的数值数组。

$sql = "SELECT * FROM {$this->prefix}doc WHERE doc_id = :doc_id";
$this->db()->getAll($sql, array('doc_id' => $this->g('id')));

占位符的用法非常简单,基本就是我们要匹配的值,将其填写占位符,然后再在对应的方法中填入占位符数值的数组则完成了。如果您还不明白,可以参考PHP官方的说明:

  1. http://php.net/manual/zh/pdostatement.execute.php 

  2. http://php.net/manual/zh/pdostatement.bindparam.php 

  3. http://php.net/manual/zh/pdostatement.bindvalue.php 

PESCMS DOC 文档系统
© Copyright 2015-2024. by the PESCMS DOC
耗时0.0207秒