海蘭,我敢嘗試執行此代碼SQL CONTAINS不起作用
public function CardsTextSearch($text){
$hashed_text = md5($text);
echo "HASHED ".$text." IN ".$hashed_text."<br>";
$result = array();
$sql = "SELECT cardID,cardName FROM Cards WHERE CONTAINS(hashedCardName, '$hashed_text')";
if ($sth = $this->DBH->query($sql)){
//echo "PREPARED <br>";
//$sth->execute(array($hashed_text));
echo "EXECUTED: ";
var_dump($sth);
echo "<br>";
$row = $sth->fetchAll(PDO::FETCH_ASSOC);
var_dump($row);
echo "<br>ROW: ".$row."<hr>";
}else{
echo "ERRORE<br>";
print_r($this->DBH->errorInfo());
}
var_dump($result);
echo "RESULT<hr>";
return $result;
}
撇開因爲加密的字符串(只是因爲現場cardName爲varchar(150)搜索的,所以不編入索引),你能告訴我,如果有代碼中的任何錯誤,因爲查詢不工作,並生成輸出如下:
HASHED壞月亮9e326d217f275a19ba1df92cb64be771
EXECUTED :對象(PDOS tatement)#5(1){[ 「的queryString」] =>串(100) 「SELECT CardId中,cardName FROM卡WHERE CONTAINS(hashedCardName, '9e326d217f275a19ba1df92cb64be771')」} 陣列(0){} ROW:數組
我確定數據庫中hashedCardName ='9e326d217f275a19ba1df92cb64be771'的現有值,不太確定列hashedCardName是否已被編入索引。 這可能是該列未被編入索引或我在代碼中做了什麼錯誤?
P.S. 我也試着用$ stmt = $ this-> DBH-> prepare()和execute(),因爲你可以在一些評論中看到我已經離開了。
謝謝! 我知道我可以使用喜歡,但在大數據庫包含比更喜歡比perormant,必須搜索表中的所有行,而不是...和INSTR它似乎是相同的。我不知道CONTAINS不起作用。你知道爲什麼嗎? –
如果你知道哈希是完全'9e326d217f275a19ba1df92cb64be771',爲什麼不直接比較'hashCardName ='$ hashed_text''並在'hashCardName'上添加一個索引 - 這將是所有的最高性能:) – StuartLC
就是這樣。 ..我也認爲,基於哈希的文本搜索沒有用,因爲哈希總是一個32char字符串,它對所有單詞都是不同的...所以如果我輸入「hello」的seacrh找不到完整的字符串「Hello World」。 –