$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%'
模式,你應該知道,這將是爲您的數據增長非常緩慢。請參閱我的演示文稿Full Text Search Throwdown。
請先檢查此鏈接 - http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-function-in-php –