返回首页
当前位置: 主页 > 网络编程 > Php实例教程 >

PDO中使用Like进行参数模糊查找

时间:2012-03-17 21:26来源:知行网www.zhixing123.cn 编辑:麦田守望者

使用以下PDO代码进行参数的模糊查找,结果没有返回数据

12345678 $db = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, $pdo_options); $query = $database->prepare('SELECT * FROM table WHERE name LIKE "%:name%"'); $query->bindValue(':name', $name, PDO::PARAM_STR); $query->execute(); while ($results = $query->fetch()) { echo $results['name']; }
分析了一下,原因是PDO在解析生成sql语句时做了防sql注入机制,将参数替换为值时默认在值的两倍增加了单引号‘,导致了最后的结果sql并非我们想要的。

正确的做法是,将模糊查询用的%放到bindValue中来,具体代码改为如下:

12345678 $db = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, $pdo_options); $query = $database->prepare('SELECT * FROM table WHERE name LIKE :name'); $query->bindValue(':name', '%'.$name.'%', PDO::PARAM_STR); $query->execute(); while ($results = $query->fetch()) { echo $results['name']; }

以上代码测试有效。

P.S.目前碰到了一个相似的问题,利用PDO机制无法完美解决,代码如下:

123456789 $field = 'name'; $value = 'maple'; $id = 1; $db = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, $pdo_options); $query = $database->prepare('UPDATE users SET :field = :value where id = :id'); $query->bindValue(':field', $field, PDO::PARAM_STR); $query->bindValue(':value', $value, PDO::PARAM_STR); $query->bindValue(':id', $id, PDO::PARAM_STR); $query->execute();

上述代码解析后的SQL语句为

1 UPDATE users SET 'name' = 'maple' where id = '1'

于是语句执行出错,目前只能用直接拼接SQL字符串的方式解决了下;各位达人看看能否给出完美的解决方案

------分隔线----------------------------
标签(Tag):php php实例教程 php源代码 php基础教程 php技巧
------分隔线----------------------------
推荐内容
猜你感兴趣