網站用戶使用搜索表單來查詢產品數據庫。輸入的關鍵字搜索數據庫中產品的標題。使用PDO準備的語句在搜索字段中使用多個關鍵字LIKE查詢
public function startSearch($keywords){
$keywords = preg_split('/[\s]+/', $keywords);
$totalKeywords = count($keywords);
foreach($keywords as $key => $keyword){
$search .= '%'.$keyword.'%';
if($key != ($totalKeywords)-1){
$search .= ' AND itemTitle LIKE ';
}
}
$sql=$this->db->prepare("SELECT * FROM prodsTable WHERE itemTitle LIKE ?");
$sql->bindParam(1, $search);
$sql->execute();
$sql->fetchALL(PDO::FETCH_ASSOC);
如果用戶輸入單個關鍵字,搜索將起作用,但如果使用多個關鍵字,則查詢不會執行。如果: $ keywords ='apple ipod'; $ search ='%apple%AND itemTitle LIKE%ipod%';
所以準備的語句應該是這樣的:
「SELECT * FROM prodsTable WHERE itemTitle LIKE%蘋果%和itemTitle LIKE%的ipod%」
沒有結果返回時,兩款產品應該返回兼具「蘋果「和」iPod「。
我在做什麼錯?
' 「SELECT * FROM prodsTable WHERE itemTitle LIKE '%蘋果%' AND itemTitle LIKE '%的ipod%'」'。你喜歡引用模式嗎? – Reflective
在foreach語句中它是'%'。$ keyword。'%'它返回準備好的語句: SELECT * FROM prodsTable WHERE itemTitle LIKE%apple% 這很有效。但是,當添加第二個或第三個關鍵字時,$ search變量變爲: '%'。$ keyword。'%'AND itemTitle LIKE - >給出準備好的語句: SELECT * FROM prodsTable WHERE itemTitle LIKE%蘋果%和itemTitle LIKE%ipod% 不起作用。添加多個關鍵字不會提供結果。 我試過它:itemTitle LIKE'%aple%',但那也行不通。我的原始準備沒有引號的作品。 –
'bindParam'將根據需要添加引號,因此它的確定 – Reflective