$term = "foo' bar";
$term_escaped = mysql_real_escape_string($term);
$sql = mysql_query("SELECT * FROM artists WHERE artist_name LIKE '%$term_escaped%'") or die ( mysql_error() );
ただし、PHPで廃止されたmysql拡張機能の代わりにPDOの使用を開始する必要があります。PDOでクエリパラメータを使用する場合、値をエスケープする必要はありません。
$term = "foo' bar";
$stmt = $pdo->prepare("SELECT * FROM artists WHERE artist_name LIKE CONCAT('%',?,'%')");
if ($stmt === false) {
die(print_r($pdo->errorInfo(), true));
}
if ($stmt->execute(array($term)) === false) {
die(print_r($stmt->errorInfo(), true));
}
更新された質問について:
元の質問の反対について質問しているようです。つまり、一部のデータに文字通りの単一引用符文字が含まれており、引用符文字を含まない一致を検索したい場合です。
LIKEで検索するパターンで引用文字を使用しないでください。
WHERE artist_name LIKE '%foo bar%'
SQLLIKE述語は全文検索ではないことを理解する必要があります。空白や句読点など、パターン文字列内の文字のシーケンスのみを検索します。これらの余分な文字を使用しない場合、それらの文字を含むデータは一致しません。
PS:LIKE '%word%'
パターンを使用しているので、データが大きくなるにつれてこれは非常に遅くなることに注意する必要があります。私のプレゼンテーション全文検索スローダウンを参照してください。