1
通過直接鍵入PDO布爾模式
SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST ('+php +mysql' IN BOOLEAN MODE)
我得到很多結果的準備聲明,對陣如果我從控制檯運行這個簡單的查詢。 現在我正試圖在php中準備這個聲明。
$keywords = ['php', 'mysql'];
$against = '';
for($i = 0; $i < count($keywords); $i++){
$against .= '+? ';
}
$query = 'SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST ('.$against.' IN BOOLEAN MODE)';
//my query is now 'SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST (+? +? IN BOOLEAN MODE)'
$stmt = $pdo->prepare($query);
$stmt->execute($keywords);
如果僅使用1個關鍵字,此腳本僅返回結果。使用2個關鍵字,它不返回任何值並且沒有錯誤(但在控制檯中可用)。所以我懷疑這是我用pdo準備我的陳述的方式。任何想法?
是否間距事?在控制檯中運行的查詢在兩個關鍵字之間有空格,而爲PDO生成的查詢將所有關鍵字創建爲僅由'+'分隔的單個字符串。 –
編輯適當的間距。 – Eric
控制檯中的查詢將所有關鍵字封裝在引號(''+ php + mysql'')中,而您準備的查詢看起來像'AGAINST(+ php + mysql IN BOOLEAN MODE)' - 也許就是這樣?嘗試使用一個佔位符,並建立字符串作爲1參數可能? – ccKep