Laravel 使用 LIKE 查询不返回任何结果
Posted
技术标签:
【中文标题】Laravel 使用 LIKE 查询不返回任何结果【英文标题】:Laravel query using LIKE does not return any result 【发布时间】:2018-05-28 01:26:00 【问题描述】:大家好,我目前遇到了这个问题。我正在尝试在 DB 上搜索某些内容,但没有返回任何结果。以下是我的代码。
搜索字符串 1 = 波士顿凯尔特人队
搜索字符串 2 = 波士顿凯尔特人队不能
DB post_title = 波士顿凯尔特人队不能让公牛队的失利影响艰难的延伸
查询
$data = $searchPost->where('post_title', 'like', '%'.$search.'%')
->orderBy('post_date', 'desc')
->offset($offset)
->limit($limit)
->get();
搜索字符串 1 会返回结果,但搜索字符串 2 不会。
【问题讨论】:
【参考方案1】:简单,因为你搜索不同的字符串。
搜索字符串 2 ".. Can't .." 使用直引号。
'
DB post_title ".. Can't .." 使用 Curly Quotes。
’
供参考:Straight and curly quotes
【讨论】:
【参考方案2】:试试下面的代码:
1) 由于can't
中的'
,您的代码可能会中断字符串。
$data = $searchPost->where('post_title', 'like', "%$search%")
->orderBy('post_date', 'desc')
->offset($offset)
->limit($limit)
->get();
【讨论】:
可能会在“db”端破坏它,而不是 php 端..."%$search%" === '%'. $search .'%'
【参考方案3】:
我的第一个猜测是撇号可能是罪魁祸首 - 在 SQL Server 中,连接运算符是“+”,因此您可能还想确保它是正确的。也许尝试删除撇号字符:
替换($search, '''', '')
Microsoft SQL 中的四个单引号是单引号的转义序列。
【讨论】:
【参考方案4】:之前遇到过同样的问题
试试这个
$data = $searchPost->where('post_title', 'like', '"%'.$search.'%"')
->orderBy('post_date', 'desc')
->offset($offset)
->limit($limit)
->get();
如您所见,前面有一个 " 开头的 % 和结尾的 % 之后的另一个。
【讨论】:
【参考方案5】:如果您仔细查看您的搜索和数据库中的 Can't,'
看起来不一样
不能 对比 不能
当'不一样的时候,确定是搜索不到的。很简单。
【讨论】:
【参考方案6】:必须使用 str_replace 方法来更改撇号字符
$search = str_replace('-', ' ', urldecode($request->input('search')));
$search = str_replace("'", "’", $search);
【讨论】:
以上是关于Laravel 使用 LIKE 查询不返回任何结果的主要内容,如果未能解决你的问题,请参考以下文章
使用 'Like' 的 Sql Query 正在给出结果,但使用 '=' 不会在 Oracle 中返回任何结果
如何在 Laravel 中使用 LIKE 语句使用查询结果并再次查询
在 Sqlite 中,LIKE 函数不起作用或不返回任何内容
PLSQL连接Oracle使用like模糊查询中文时返回结果为空