2012-11-10 43 views
1

,所以我必須做的插入,但現在我似乎無法弄清楚如何做一個「喜歡」搜尋那些記錄...MySQL查詢搜索時記錄值insterted與真正的轉義字符串使用<code>mysql_real_escape_string</code>

任何幫助將不勝感激。也許有更好的方法來做到這一點?

這麼簡單的例子會是:

在DB記錄裏有foo'bar。

現在我想搜索foo bar或foo'bar,但是我一直在收到mysql錯誤。

$term = "foo' bar"; 
$sql = mysql_query("SELECT * FROM artists WHERE artist_name LIKE '%$term%'") or die (mysql_error()); 

也想知道,如果在表中的記錄被設置爲」富」欄」中我如何可以搜索只是‘富巴’一個LIKE

+0

請先檢查此鏈接 - http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-function-in-php –

回答

0

Nooooooooo!不要使用mysql。使用pdo。

require_once('../php_custom_classes/database.php'); 

$testObj = new Database(); 
$newObj = new PDO("mysql:host=".$this->hostName.";dbname=".$this->dbName, $this->username, $this->password); 


$term = 'foo bar'; 
$sql = "SELECT * FROM artists WHERE artist_name LIKE '%$term%'"; 
$stmt = $newObj->prepare($sql); 
$stmt->execute(); 
while($row = $stmt->fetch()) { 
    echo $row['article_id']; 
} 
2
$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

+0

說得好先生。我花了更多的時間來編碼它:) +1 –

+0

我對這個項目非常深入,不知道需要多長時間才能完成整個項目。還有一個問題。你知道我怎麼能得到它返回結果,如果搜索詞是「富酒吧」我怎麼可以返回「富」欄作爲像? – rchiriboga

+0

我無法分辨你的意思。請編輯您的原始問題,並添加您想要搜索的內容以及要與之匹配的數據的示例。 –

相關問題