MySQL LIKE返回所有结果

时间:2015-09-02 03:20:02

标签: php mysql search pdo

我正在尝试根据来自表单的字符串过滤结果。这是我的代码。

<?php
    $query = $_GET['query']; // gets the string entered from the form.

    $userSearch = $db->prepare("SELECT id, user_id, feedback FROM `QComments` 
                                WHERE `feedback` 
                                LIKE '%$query%' 
                                ORDER BY user_id");

    $userSearch->execute();
    $userSearchResult = $userSearch->fetchAll(PDO::FETCH_ASSOC);  
?>

<?php // Display search result

    foreach ($userSearchResult as $result1){
        echo $result1['feedback']; 
    }

?>

无论我输入什么字符串,这基本上都会显示数据库中的所有记录。

但是当我在PHPMYAdmin SQL框中输入这个MySQL语句时

SELECT id, user_id, feedback FROM `QComments` 
WHERE `feedback` 
LIKE '%suggestion%' 
ORDER BY user_id

我只获得具有建议关键字的结果。但PHP正在显示所有内容。我的代码出了什么问题?请建议我。

1 个答案:

答案 0 :(得分:1)

使用这样的预备语句一直对我有用。

准备好的语句不只是执行字符串替换。它们将数据与查询完全分开传输。仅在将值嵌入查询时需要引号

<?php
    $query = '%'.$_GET['query'].'%'; // gets the string entered from the form.

    $userSearch = $db->prepare("SELECT id, user_id, feedback FROM `QComments` 
                                WHERE `feedback` 
                                LIKE :query
                                ORDER BY user_id");
    $userSearch->BindParam(':query', $query);
    $userSearch->execute();
    $userSearchResult = $userSearch->fetchAll(PDO::FETCH_ASSOC);  
?>