第三十一节 PHP MySQL预处理语句

PHP零基础入门

预处理语句:对于防止MySQL注入是非常有用的,用于执行多个相同的SQL语句

预处理语句:对于防止MySQL注入是非常有用的,预处理语句及绑定参数,预处理语句用于执行多个相同的SQL语句,执行效率更高。将SQL与外部数据混合时,我们需要养成使用预处理语句的习惯,它将保护我们免受应用程序中的巨大安全漏洞的影响。创建文件夹6.5_using_prepared_statements,把《mysql数据库介绍:使用PDO发出查询》代码复制到本节课。

预处理语句-修复跳转链接到详情页

第一步、修改index.view.php代码

修改为

第二步、编写detail.php控制器代码

使用get_term函数访问config的provider对象term属性:

第三步、在mysqldataprovider.php编写代码

1、编写get_term()代码

程式解释

  1. 链接数据库
  2. 如果链接不成功返回空
  3. 传递进来的id参数,作为读取phrases_terms数据设置条件
  4. 这种写法是很危险的:
    1. 恶意用户攻击
    2. 他们通过get_term($id)传递给我们的术语查询参数来修改sql语句
      1. 可以传递参数删除这个表的数据
      2. 也可以传递查询所有这个表的数据
  5. 使用来自用户数据
    1. 净化处理(sanitize)
    2. 不能直接包含在sql语句中,它会导致sql注入攻击

改进写法

程式解释

  1. $stmt = $db->query($sql,PDO::FETCH_CLASS,’PhrasesTerm’);开始
  2. 通过id选择,意味着我们有一个或两个结果,要么只匹配一个,因为id是唯一的,最多有一条记录,或者没有记录匹配;
  3. $data = $stmt->fetchAll();查询所有数据
  4. 如果$data是空的,返回错误
  5. 设置$stmt等于null
  6. 返回 $data[0]一条数据值

测试访问正常

预处理语句-提高安全性

第一步、把.$id的连接符改为

第二步、预处理语句

程式解释

  1. 使用占位符在查询中:id
  2. 使用预处理语句prepare($sql)
  3. 无论执行什么根据我们提供数据和占位符
    1. 函数里面数组
    2. 键是:id占位符
    3. 值就是用户请求传进来的值$id

第三步、已经有execute就不要在执行一次代码

合并代码

代码解释

  1. fetch_class类的模式
  2. 获取phrasesterm的类

下载本节《PHP MySQL预处理语句》完整的代码

接近10年的互联网从业经验,精通Scrum敏捷软件开发的方法,从事互联网产品设计,开发,测试,运营,案例不少于20个,发现自己最喜欢的工作是做外贸营销,外贸SEO,特别喜欢谷歌优化。从2017年3月开始坚持在群161510483直播谷歌SEO和WEB前端开发技术,只要加进来坚持学习零基础也能够学会。

Last modified: 2019年5月1日

Previous Story

PHP零基础入门

第十二节:PHP发送POST请求

PHP发送POST请求:向指定的资源提交要被处理的数据用POST方法发送参数,请求不会被缓存,请求不会保留在浏览器历史记录中,不能被收藏为书签,请求对数据长度没有要求.

...

Next Story

PHP零基础入门

第三十二节 php搜索数据库信息

php搜索数据库信息:搜索数据库信息是很容易操的,本节课将实现一些搜索功能.

...