Answers:
实际上很简单:
mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'
");
的%
是用于设置任何字符(无,一个或多个)的通配符。请注意,这在非常大的数据集上会变慢,因此,如果数据库增长,则需要使用全文索引。
column LIKE '...'
不区分大小写,不区分column LIKE BINARY '...'
大小写
LIKE
是,由于该运算符使用两个通配符:%
和,因此建议检查任何子字符串_
。这意味着,如果您的字符串$ needle包含此特殊字符之一,则结果根本不符合预期。(-1)表示此回复,(+ 1)表示INSTR回复。
LIKE %...%
如果存在索引,则不会使用索引,因此它们应该等效;LIKE ...%
如果存在,将使用索引。如果真正关心性能,则全文搜索(FTS)将是更好的方法。
like
operator 的子字符串的存在对事物进行排序。随着instr
一个短语可以责令这样select * from table order by instr(col1,"mystring")
WHERE `column` LIKE '%$needle%'
请注意,这很危险:
WHERE `column` LIKE '%{$needle}%'
首先做:
$needle = mysql_real_escape_string($needle);
这样可以防止可能的攻击。
mysql_real_escape_string
在将来的PHP版本中将不推荐使用。
$stmt = $dbh->prepare("Where 'column' LIKE '{:needle}'"); $stmt->bindParam(':needle', $needle); $stmt->execute();