我的查询存在问题,其中包含“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/