2009-02-24 107 views

回答

103

想通了之後我貼:

$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); 
$query->execute(array('value%')); 

while ($results = $query->fetch()) 
{ 
    echo $results['column']; 
} 
+7

這不是墨菲定律;) – 2009-02-24 20:22:59

+1

@Andrew:如果多個'like`用來 ? execute數組應該如何執行? – logan 2014-04-03 18:00:22

+0

謝謝。與csharp + Mysql + ODBC有類似的問題,就像它不會使用「select * from table where'列'like'%?%';'但會如果我喜歡你做「選擇*從表中哪裏列?」;並設置參數字符串如下:string frag = $「%{searchFragment}%」;然後使用frag作爲參數值。奇怪的 – sdjuan 2016-11-08 19:34:25

52

使用像與%部分匹配你也可以這樣做:column like concat('%', :something, '%')(換句話說,使用明確未轉義的%符號,絕對不是用戶輸入的)與命名參數:something

編輯:我發現一個可選的語法是使用串聯運算符:||,所以它會簡直成了: where column like '%' || :something || '%' etc

@bobince提到here是:

difficulty 當您想要在 搜索字符串中允許字符%_字符,而不用作通配符。

所以當結合like和參數化時,這是別的要注意的。

15
$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?'); 
$query->bindValue(1, "%$value%", PDO::PARAM_STR); 
$query->execute(); 

if (!$query->rowCount() == 0) 
{ 
    while ($results = $query->fetch()) 
    { 
     echo $results['column'] . "<br />\n"; 
    }  
} 
else 
{ 
    echo 'Nothing found'; 
} 
7

你也可以試試這個。我面臨類似的問題,但經過研究後得出結果。

$query = $pdo_connection->prepare('SELECT * FROM table WHERE column LIKE :search'); 

$stmt= $pdo_connection->prepare($query); 

$stmt->execute(array(':search' => '%'.$search_term.'%')); 

$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

print_r($result); 
-1

PDO逃脫「%」(有可能會導致SQL注入):尋找匹配如果訪問者輸入的字符部分字符串時使用以前的代碼會給渴望結果「% 「即使你沒有任何存儲在數據庫中的數據,你仍然可以得到結果(它可能導致sql注入)

我已經嘗試了很多變化,所有結果都一樣PDO正在轉義」%「不想要的/不受歡迎的搜索結果。

不過,我覺得這是值得分享,如果有人發現它周圍的字請分享

1

這工作:

search `table` where `column` like concat('%', :column, '%') 
相關問題