我正在嘗試使用PDO準備語句編寫關鍵字搜索。理想情況下,我想利用LIKE運算符在字段值內搜索一個子字符串。這裏是我的代碼:使用帶%的LIKE運算符用PDO預準備語句進行關鍵字搜索
$statement = $this->db->prepare("select * from whatever where title like ? or author like ?");
$statement->execute(array("%$titleKeyword%","%$authorKeyword%"));
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
不幸的是,當我嘗試這樣做時,$ rows總是空的。但是,如果我將SQL複製到phpMyAdmin中,並將每個「%keyword%」替換爲?符號,它工作正常(當使用關鍵字時,我會得到結果)。
我也曾嘗試下面的代碼:
$statement = $this->db->prepare("select * from whatever where title like :titleKeyword or author like :authorKeyword");
$statement->bindValue(":titleKeyword", '%'.$titleKeyword.'%', PDO::PARAM_STR);
$statement->bindValue(":authorKeyword", '%'.$authorKeyword.'%', PDO::PARAM_STR);
$statement->execute();
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
我在那你應該綁定參數時,而不是在SQL本身(事先準備好的聲明中)以包括%另一個問題看,但那不起作用。
我可以求助於直接插入關鍵字到SQL(做一些消毒後),但我想堅持準備好的語句。任何幫助將不勝感激。
剛剛做了一個快速的模擬和工作正常(PHP 5.3.5)〜你一定要在綁定值時添加'%'。也許問題與您的$ titleKeyword&$ authorKeyword? – TerryProbert
不幸的是,沒有。我在這裏發佈之前檢查過這些內容。 – Randy