[英]PHP with SQL wildcard search
在PHP中,我有一个函数来返回搜索表单的结果。
function search($search) {
global $database;
$search2 = ( '%' . $search[0] . $search[1] . $search[2] . $search[3] . '%' );
$q1 = "SELECT * FROM location WHERE is_approved = 1
AND (city LIKE '$search'
OR state LIKE '$search'
OR state LIKE '$search2'
OR 'city' LIKE '$search2')";
$matches = $database ->query($q1);
return $matches;
}
search2变量用于通配符搜索位置中的四个字符匹配,例如匹配'Cincinnati'的'Cinc'。 要执行此操作,查询需要前后带%字符的通配符。
每当我直接在MYSQL中运行查询来测试它时,它都可以正常工作。 每当我在PHP代码中运行它时,通配符部分似乎不起作用。 如果我在我的例子中回显%search2,$ search2将回显%Cinc%,这是我认为它应该用于通配符搜索。 为什么通配符部分没有返回结果?
你真的生成一个看起来像的SQL搜索字符串
WHERE something LIKE '%foobarbaz%'
这将仅匹配字段,其中字段实际上包含其中的某个字符串foobarbaz
。 如果你想搜索单词foo
, bar
和baz
,你需要
WHERE something like '%foo%' OR something like '%bar%' OR something LIKE '%baz%'
对于多个单词,这非常难看,并且使用%..%
通配符也会阻止索引的使用,这意味着您的查询将在每次执行时强制执行全表扫描。
您应该考虑使用FULLTEXT索引 ,这也会减少您的查询
WHERE MATCH (something) AGAINST ('foo bar baz')
哪里
尝试这个 -
$search2 = '%'.$search[0],$search[1],$search[2],$search[3].'%';
$q1 = "SELECT * FROM location WHERE is_approved = 1
AND (city LIKE '".$search."'
OR state LIKE '".$search."'
OR state LIKE '".$search2."'
OR city LIKE '".$search2."')";
语法突出显示帮助我发现它,我从查询中的“城市”中删除了单引号,它工作得很好。 它可能是PHP解析单引号。
原始查询
SELECT * FROM tournaments
WHERE is_approved = 1
AND (city LIKE '$search'
OR state LIKE '$search'
OR state LIKE '$search2'
OR 'city' LIKE '$search2')
而不是
SELECT * FROM tournaments
WHERE is_approved = 1
AND (city LIKE '$search'
OR state LIKE '$search'
OR state LIKE '$search2'
OR city LIKE '$search2')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.