ASCII码 ASCII码

初识pdo,与防sql注入

发布于:2022-02-15 10:27:52  栏目:技术文档

使用PDO链接mysql数据库

  • PDO(PHP数据对象) 是一个轻量级的、具有兼容接口的PHP数据连接拓展,是一个PHP官方的PECL库,随PHP 5.1发布,需要PHP 5的面向对象支持,因而在更早的版本上无法使用。它所提供的数据接入抽象层,具有与具体数据库类型无关的优势,为它所支持的数据库提供统一的操作接口。目前支持多种数据库等。由于PDO是在底层实现的统一的数据库操作接口,因而利用它能够实现更高级的数据库操作,比如存储过程的调度等。

  • 创建数据库配置文件database.php

  1. <?php
  2. return [
  3. 'type' => $type ?? 'mysql',
  4. 'username' => $username ?? 'root',
  5. 'password' => $password ?? '',
  6. 'host' => $host ?? 'localhost',
  7. 'port' => $port ?? '3308',
  8. 'charset' => $charset ?? 'utf8',
  9. 'dbname' => 'chloe'
  10. ];
  • 创建connet.php文件引入database.php配置文件,并且链接数据库
  1. // 1. 把数据库连接配置文件引过来
  2. $config = require_once __DIR__ . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'database.php';
  3. extract($config);
  4. //dsn data source name 数据源名称 包括pdo驱动名称,host,port,数据库名称。
  5. // $dsn = 'mysql:host=localhost;port=3308;dbname=chloe';
  6. // $username = 'roots';
  7. // $password = '';
  8. // $pdo = new PDO($dsn, $username, $password);
  9. // var_dump($pdo);
  10. $dsn = sprintf('%s:host=%s;port=%s;charset=%s;dbname=%s', $type, $host, $port, $charset, $dbname);
  11. try {
  12. $pdo = new PDO($dsn, $username, $password);
  13. // var_dump($pdo);
  14. } catch (PDOException $e) {
  15. die('Connection error : ' . $e->getMessage());
  16. }

防sql语句注入

  • sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。例如一个简单的登录表单(这里把密码写成明文方便说明):

sql注入语句

当在表单中填写这样的语句进行提交登录时会出现这样的SQL语句

  1. select * from t_admin where admin_name='xxx' and admin_pwd='xxx'' or '1'

这样会查询出所有的用户信息,所有存在不安全隐患

  • 如何预防sql注入1.使用pdo预处理接入
  1. // 准备一条预处理sql语句
  2. $sql = "SELECT * FROM `user` WHERE `username`= ? AND `password` = ? ";
  3. // 准备要执行的语句,并返回语句对象
  4. $stmt = $pdo->prepare($sql);
  5. // 绑定参数到指定的变量名
  6. $stmt->bindParam(1, $name);
  7. $stmt->bindParam(2, $pwd);
  8. // 执行一条预处理语句
  9. $stmt->execute();
  10. $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
相关推荐
阅读 +