2014-02-16 49 views
0

我在執行fulltext()搜索我的查詢時遇到了一些困難。現在,AGAINST()段中的參數不會引發錯誤 - 除非它們被包裝在單引號中。PDO:綁定值包裝在MATCH()查詢的單引號中()查詢

錯誤PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

這是有道理的,因爲他們不應該是文字,相反,他們應該是字符串,所以值不被約束,對不對?但爲了使此查詢起作用,AGAINST()中的參數必須用單引號括起來。

MATCH(features) AGAINST(':feature_set :feature_unset') 

$bind_array[":feature_set"] = $feature_set; 
$bind_array[":feature_unset"] = $feature_unset; 

$stmt = $conn->prepare($query); 
$stmt->execute($bind_array); 

:feature_set :feature_unset

將返回格式化像這樣的字符串:

+ Softaculous - 免費域名-Site生成器-Fantastico

有誰知道的解決方案?非常感謝,謝謝!

回答

2

嘗試這種方式

$query = '... MATCH(features) AGAINST(:against IN BOOLEAN MODE)'; 

$bind_array[":against"] = $feature_set . ' ' . $feature_unset; 

$stmt = $conn->prepare($query); 
$stmt->execute($bind_array); 

這裏是SQLFiddle演示。

+0

嗨,謝謝你的回答。我不能實現這一點,因爲查詢除了'match()'之外還有許多其他參數,並且在滿足每個條件時緩慢建立'$ bind_array'。你介意解釋你的答案,爲什麼它會工作,它可以解決這個問題。再次感謝:) –

+0

'AGAINST'期望唯一的字符串表達式。因此,你必須有一個綁定參數,並且不應該在佔位符周圍使用引號。查看更新的答案。 – peterm

+0

謝謝,這是一種享受。作爲一個參考,我想我應該補充說我還找到了另一個解決方案。解決方案是將單引號連接到變量本身。總的來說,@peterm的答案提供了一個更清晰的解決方案,所以我就這樣做了。 –