MySQL 查询字符串包含
-
25-09-2019 - |
题
我一直在试图弄清楚如何使用 MySQL 进行查询来检查值(字符串 $haystack
)在某一列中包含某些数据(字符串 $needle
), 像这样:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
在 PHP 中,该函数被称为 substr($haystack, $needle)
, ,所以也许:
WHERE substr(`column`, '{$needle}')=1
解决方案
实际上很简单:
mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'
");
在%
为任何字符的通配符。注意,这可能很慢非常大的数据集,所以如果你的数据库的增长,你需要使用的全文索引。
其他提示
WHERE `column` LIKE '%$needle%'
矿使用 LOCATE
在MySQL :
LOCATE(SUBSTR,STR),LOCATE(SUBSTR,STR,POS)
此函数是多字节安全的,并且是区分大小写仅当至少一个参数是二进制字符串。
在你的情况:
mysql_query("
SELECT * FROM `table`
WHERE LOCATE('{$needle}','column') > 0
");
在除了从@WoLpH答案。
当使用LIKE
关键字也有能力限制哪个方向字符串匹配。例如:
如果你正在寻找一个字符串,它与你的$needle
启动:
... WHERE column LIKE '{$needle}%'
如果你正在寻找一个字符串与$needle
端:
... WHERE column LIKE '%{$needle}'
请注意,这很危险:
WHERE `column` LIKE '%{$needle}%'
首先做:
$needle = mysql_real_escape_string($needle);
这样可以防止可能的攻击。
不隶属于 StackOverflow