$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() );
但是您应该开始使用 PDO 而不是 PHP 中已弃用的 mysql 扩展。当您将查询参数与 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%'
您应该了解 SQL LIKE 谓词不是全文搜索。它只搜索您的模式字符串中的字符序列,包括空格和标点符号等。如果您不使用这些额外字符,则包含这些字符的数据将不匹配。
PS:由于您正在使用该LIKE '%word%'
模式,因此您应该知道随着数据的增长,这将非常缓慢。请参阅我的演示文稿全文搜索Throwdown。