【问题标题】:MySQL LIKE returning all the resultMySQL LIKE 返回所有结果
【发布时间】:2015-09-02 03:20:02
【问题描述】:

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

<?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 显示了一切。我的代码有什么问题?请给我建议。

【问题讨论】:

  • 如果您回显$query,它的值是否正确?你没有正确使用准备好的语句,php.net/manual/en/pdo.prepared-statements.php
  • 首先检查你的prepare正在准备什么......你想要什么查询或者喜欢'%%'......

标签: php mysql search pdo


【解决方案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);  
?>

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2023-03-26
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多