首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MYSQL "LIKE“正确检查关键字

如何使用MYSQL "LIKE“正确检查关键字
EN

Stack Overflow用户
提问于 2018-09-19 21:52:24
回答 2查看 137关注 0票数 1

我想知道如何正确地检查关键字与SQL“喜欢”;

我有一个剧本,看起来是这样的:

代码语言:javascript
复制
$search_keywords = $_POST['search-keywords'];
$search_keywords = str_replace(" ","%", $search_keywords);
$search_keywords = '%' . $search_keywords . '%';
$search = $odb -> query("SELECT * FROM `cars` WHERE `keywords` LIKE '".$search_keywords."' ORDER BY `id` ASC");
$rows = $search->rowCount();
if ($rows > 0) {//Loop}

实际上,它是有效的,但只有当数据库中的关键字看起来像这样时,它才能正常工作:

audi, a3, silver和我搜索audi a3

如果我想像这样搜索:a3 audi,它不起作用

有什么暗示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-19 22:04:34

您需要将$search_keywords分割成单独的单词,并搜索其中的每个单词。

若要搜索逗号分隔列表中的项,请使用FIND_IN_SET()而不是LIKELIKE '%audi%'也将匹配奥迪-卡特罗.

代码语言:javascript
复制
$keyword_array = explode(" ", $_POST['search_keywords']);
foreach ($keyword_array as &$keyword) {
    $keyword = "FIND_IN_SET('$keyword', keywords)";
}
$tests = implode(' AND ', $keyword_array);
// $tests contains something like: FIND_IN_SET('a3', keywords) AND FIND_IN_SET('audi', keywords)
$sql = "SELECT * FROM `cars` WHERE $tests ORDER BY `id` ASC";
$search = $odb->query($sql);
票数 1
EN

Stack Overflow用户

发布于 2018-09-19 22:03:54

在请求中传递用户数据时使用PDO::prepare是一种最佳实践,以使SQL Injection变得更好

代码语言:javascript
复制
$search = $odb->prepare("SELECT * FROM cars WHERE keywords 
    LIKE CONCAT('%',:keyword,'%') 
    ORDER BY id ASC");
$results = $search->execute([":keywork" => $search_keywords]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52414673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档