ari*_*rik 276 php mysql sql string-comparison
我一直试图弄清楚如何用MySQL来查询$haystack
某个列中的值(字符串)是否包含某些数据(字符串$needle
),如下所示:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
Run Code Online (Sandbox Code Playgroud)
在PHP中,函数被调用substr($haystack, $needle)
,所以可能:
WHERE substr(`column`, '{$needle}')=1
Run Code Online (Sandbox Code Playgroud)
Wol*_*lph 405
实际上非常简单:
mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'
");
Run Code Online (Sandbox Code Playgroud)
这%
是任何角色的通配符.请注意,这可能会在非常大的数据集上变慢,因此如果您的数据库增长,则需要使用全文索引.
OMG*_*ies 134
使用:
SELECT *
FROM `table`
WHERE INSTR(`column`, '{$needle}') > 0
Run Code Online (Sandbox Code Playgroud)
参考:
chr*_*ris 51
WHERE `column` LIKE '%$needle%'
Run Code Online (Sandbox Code Playgroud)
ris*_*dar 25
我LOCATE
在mysql中使用:
LOCATE(substr,str),LOCATE(substr,str,pos)
此函数是多字节安全的,仅当至少一个参数是二进制字符串时才区分大小写.
在你的情况下:
mysql_query("
SELECT * FROM `table`
WHERE LOCATE('{$needle}','column') > 0
");
Run Code Online (Sandbox Code Playgroud)
Jos*_*ell 10
除了@WoLpH的回答.
使用LIKE
关键字时,您还可以限制字符串匹配的方向.例如:
如果您正在寻找以您的$needle
:
... WHERE column LIKE '{$needle}%'
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找以以下结尾的字符串$needle
:
... WHERE column LIKE '%{$needle}'
Run Code Online (Sandbox Code Playgroud)
小智 5
您可能正在寻找find_in_set
功能:
Where find_in_set($needle,'column') > 0
Run Code Online (Sandbox Code Playgroud)
该函数的作用类似于in_array
PHP 中的函数
请注意,这是危险的:
WHERE `column` LIKE '%{$needle}%'
Run Code Online (Sandbox Code Playgroud)
先做:
$needle = mysql_real_escape_string($needle);
Run Code Online (Sandbox Code Playgroud)
所以它会阻止可能的攻击。