php - MySQL 出现 'Like' 查询问题

标签 php mysql sql-like

我的查询存在问题,其中包含“like”语句。

这是我的代码:

function get_number_of_locations_by_zip_tag($zip, $tag) 
{
        global $db;
        $query = "SELECT * FROM location WHERE zip = :zip AND disabled = 0 AND (tags LIKE :tag OR name LIKE :tag) LIMIT :start, :number";

        $statement = $db->prepare($query);
        $statement->bindValue(':zip', $zip);
        $statement->bindValue(':tag',  '%'.$tag.'%', PDO::PARAM_STR);
        $statement->execute();
        $locations = $statement->fetchAll(); //fetch();
        $statement->closeCursor();
        return $locations;
}

我期望查询返回标签与“名称”或“标签”字段匹配的行,但它只会返回标签匹配的行。

如果我将查询切换为:

$query = "SELECT * FROM location WHERE zip = :zip AND disabled = 0 AND (name LIKE :tag OR tags LIKE :tag) LIMIT :start, :number";

那么结果是相反的,它只会返回name字段匹配的行,而忽略tags字段。

有人发现这个查询有什么问题吗?当我开始开发时,它在 Windows 上的 XAMPP 服务器上按照我的预期工作,但是当我将所有内容切换到我的 LAMP 服务器时,此查询不再正常工作。

最佳答案

您可能想要更改:

tags LIKE :tag OR name LIKE :tag

tags LIKE ':tag' OR name LIKE ':tag'

或者更改您的代码:

  $statement->bindValue(':tag',  '\'%'.$tag.'%\'', PDO::PARAM_STR);

as like 表达式应该用引号引起来。例如 name LIKE '%john%'

关于php - MySQL 出现 'Like' 查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7397218/

相关文章:

PHP 数组 JSON 到 Javascript

php - 提交时间戳到mysql

MYSQL Like 不正确的结果

MYSQL SELECT WHERE LIKE WITH AES_ENCRYPT

php - 如何用php Zend框架配置MySQL数据?

php - 如何组合这些查询以获得更快的性能?

php - 为什么要在 PHP 中使用静态调用?

php - JqG​​rid删除行的两个参数

php - 如何使用 PHP 在 MySQL 数据库中存储和检索嵌入的 YouTube?

Mysql 使用搜索字符串排序