海兰,我敢尝试执行此代码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”。 –