欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初识pdo,与防sql注入

程序员文章站 2022-03-06 13:04:39
...

使用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命令。
    例如一个简单的登录表单(这里把密码写成明文方便说明):

初识pdo,与防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);