回答:
実際にはかなり単純です:
mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'
");
%
設定された任意の文字(なし、1つ以上)のワイルドカードです。これは非常に大きなデータセットでは遅くなる可能性があるため、データベースが大きくなった場合はフルテキストインデックスを使用する必要があることに注意してください。
column LIKE '...'
大文字と小文字を区別せず、大文字と小文字をcolumn LIKE BINARY '...'
区別
LIKE
、この演算子は、2つのワイルドカード文字を使用していますので、任意の部分文字列をチェックするために提案されています%
と_
。これは、文字列$ needleにこの特殊文字のいずれかが含まれている場合、結果が期待どおりにならないことを意味します。(-1)この応答の場合、および(+1)INSTR応答の場合。
LIKE %...%
存在する場合はインデックスを使用しないため、同等である必要があります。LIKE ...%
存在する場合はインデックスを使用します。パフォーマンスが真の懸念事項である場合は、全文検索(FTS)がより良いアプローチになります。
like
演算子付きの部分文字列の存在に従って物事を並べ替える方法がないため、この解決策が好きです。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();