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

占位符

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

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

占位符数值提交

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

  1. $this->db('user)->where('user_id = :user_id')->find(array('user_id' => $this->g('uid')));
  2.  
  3. $this->db('doc')->insert(array('doc_title' => '新文档', 'doc_tree_id' => '1'));

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

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

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