Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
PDO(PHP数据对象) 是一个轻量级的、具有兼容接口的PHP数据连接拓展,是一个PHP官方的PECL库,随PHP 5.1发布,需要PHP 5的面向对象支持,因而在更早的版本上无法使用。它所提供的数据接入抽象层,具有与具体数据库类型无关的优势,为它所支持的数据库提供统一的操作接口。目前支持多种数据库等。由于PDO是在底层实现的统一的数据库操作接口,因而利用它能够实现更高级的数据库操作,比如存储过程的调度等。
创建数据库配置文件database.php
<?php
return [
'type' => $type ?? 'mysql',
'username' => $username ?? 'root',
'password' => $password ?? '',
'host' => $host ?? 'localhost',
'port' => $port ?? '3308',
'charset' => $charset ?? 'utf8',
'dbname' => 'chloe'
];
// 1. 把数据库连接配置文件引过来
$config = require_once __DIR__ . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'database.php';
extract($config);
//dsn data source name 数据源名称 包括pdo驱动名称,host,port,数据库名称。
// $dsn = 'mysql:host=localhost;port=3308;dbname=chloe';
// $username = 'roots';
// $password = '';
// $pdo = new PDO($dsn, $username, $password);
// var_dump($pdo);
$dsn = sprintf('%s:host=%s;port=%s;charset=%s;dbname=%s', $type, $host, $port, $charset, $dbname);
try {
$pdo = new PDO($dsn, $username, $password);
// var_dump($pdo);
} catch (PDOException $e) {
die('Connection error : ' . $e->getMessage());
}
当在表单中填写这样的语句进行提交登录时会出现这样的SQL语句
select * from t_admin where admin_name='xxx' and admin_pwd='xxx'' or '1'
这样会查询出所有的用户信息,所有存在不安全隐患
// 准备一条预处理sql语句
$sql = "SELECT * FROM `user` WHERE `username`= ? AND `password` = ? ";
// 准备要执行的语句,并返回语句对象
$stmt = $pdo->prepare($sql);
// 绑定参数到指定的变量名
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $pwd);
// 执行一条预处理语句
$stmt->execute();
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);