繁体   English   中英

PDO中的LIKE查询无法正常工作

[英]LIKE query in PDO not working

PDO查询运行正常,但是当我尝试使用LIKE查询时,它将无法正常工作并给出错误消息。 我知道我做错了,请任何人指出我出了问题的地方以及如何正确运行LIKE查询。

<?php
/**
 * Created by PhpStorm.
 * User: HaiderHassan
 * Date: 9/3/14
 * Time: 9:52 PM
 */
header('Access-Control-Allow-Origin: *');
try {
    $conn = new PDO('mysql:host=localhost;dbname=houserentsystem;charset=utf8', 'root', 'admin');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}
if($_POST['searchFilter']){
    $searchFilter = "%".$_POST['searchFilter']."%";
    echo $searchFilter;
    $stmt = $conn->query("SELECT roomName FROM roomnames WHERE roomName LIKE".$searchFilter);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $stmt->closeCursor();
    print_r(json_encode($results));
}

我在表( roomnamesroomIDroomName有两列,我想获取与发布值匹配的数据结果。

您有多个问题:

a)容易受到SQL注入攻击
b)LIKE之后缺少空格,表示您正在制作

... LIKE%foo%

c)搜索参数周围缺少引号,因此即使您修复了b),仍然会遇到问题。 它应该是

... LIKE '$searchParameter'
         ^----------------^--- note the quotes

在这一行:

    $stmt = $conn->query("SELECT roomName FROM roomnames WHERE roomName LIKE".$searchFilter);
  1. LIKE后面必须有一个空间
  2. 您需要将撇号之间的字符串括起来以使其成为实际的SQL字符串
  3. 绝对应该使用参数化查询 ,因为现在这是一个巨大的SQL注入漏洞(如果有人搜索';delete from roomnames; select ' ?怎么办?)

声明应准备

if($_POST['searchFilter']){
    $searchFilter = $_POST['searchFilter'];
    echo $searchFilter; 
    try {
        $conn = new PDO('mysql:host=localhost;dbname=houserentsystem;charset=utf8', 'root', 'admin');
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $conn->prepare("SELECT roomName FROM roomnames WHERE roomName LIKE ?");
        $stmt->execute(array('%'.$searchFilter.'%')); 
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
        //print_r($results);
        echo json_encode($result);
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM