PDO绑定参数进行模糊查询问题

使用PDO绑定数据去进行模糊查询遇到的问题

 

<?php

try {
    $dsn = 'mysql:host=localhost:3306;dbname=test';// 数据源配置
    $username = 'root'; // 数据库用户
    $passwd   = '';       // 数据库密码
    $pdo      = new PDO($dsn, $username, $passwd);
    $pdo->query("SET NAMES utf8");

    /*****
    // 错误的写法
    $sql = " SELECT `id`,`name` FROM `students` WHERE `name` LIKE  '%:name%'  ";
    bindValue(':name', $name, PDO::PARAM_STR);
    这样会出错,因为为了防止sql注入,其内部将%做了修改。
    可以使用 $stmt->debugDumpParams(); 查看
    
    应该这样绑定
    $sql = " SELECT * FROM `user` WHERE `username` LIKE :name ";
    bindValue(':name', '%'.$name.'%', PDO::PARAM_STR);
    *****/

    $sql = " SELECT * FROM `user` WHERE `username` LIKE :name ";
    $stmt=$pdo->prepare($sql);
    $name = 'zel';
    $stmt->bindValue(':name', '%'.$name.'%', PDO::PARAM_STR);
    $res = $stmt->execute();
    $row = $stmt->fetchAll(PDO::FETCH_ASSOC);
    var_dump($row);

} catch (PDOException $e) {
    echo $e->getMessage();
}

 

 

posted @ 2017-04-14 18:00  Zel+_+  阅读(436)  评论(0编辑  收藏  举报