PHP 学习之路:第二十九天——pdo 预处理机制

172 阅读1分钟

一、注册页面逻辑

  1. 连接数据库
  2. 接受数据
  3. 在插入数据到数据表之前,做用户名检测
  4. insert sql 语句,插入数据库

二、pdo 预处理

pdo预处理机制 防止sql注入
pdo使用 ?参数占位符 或者 命名占位符 :name

<?php

require '1-connect.php';

$username = isset($_POST['username']) ? $_POST['username'] :null;
$password = isset($_POST['password']) ? $_POST['password'] :null;

//pdo预处理机制  防止sql注入
//pdo使用 ?参数占位符 或者 命名占位符 :name 

//可以把它看作是想要运行的 SQL 的一种编译过的模板
$sql = "SELECT `uname`,`pwd` FROM `users` WHERE `uname`= ?" ;
 
//prepare()方法 - 准备一条将要执行的预处理语句 返回的是pdo statement 对象
$stmt = $pdo->prepare($sql);
//bindParam()绑定一个参数到指定的变量名
$stmt->bindParam(1,$username,PDO::PARAM_STR, 12);
// $stmt->bindParam(2,$password,PDO::PARAM_STR, 60);

//执行一条预处理语句
$stmt->execute();

// echo '受影响的行数' . $stmt->rowCount();

// $res  = $pdo->query($sql)->fetch();
//检测用户是否存在
$res  = $stmt->fetch();
// var_dump($res);
if($res)
{
    //检测密码 的正确性
    if(password_verify($password,$res['pwd']))
    {
        echo json_encode(array('status'=>1,'msg'=>'登录成功'),320);
    }else{
        echo json_encode(array('status'=>0,'msg'=>'用户名或密码错误'),320);
    }
}else{
    echo json_encode(array('status'=>0,'msg'=>'用户名或密码错误'),320);
}