SQL CONTAINS不起作用

时间:2014-03-01 13:38:30

标签: php sql

Hy,我正在尝试执行此代码

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),所以不可索引),你能不能告诉我代码中是否有任何错误,因为查询没有work,生成的输出如下:

  

HASHED Bad Moon IN 9e326d217f275a19ba1df92cb64be771

     

EXECUTED:Object(PDOStatement)#5(1){[“queryString”] =&gt; string(100)“SELECT cardID,cardName FROM Cards WHERE CONTAINS(hashedCardName,'9e326d217f275a19ba1df92cb64be771')”}   数组(0){}   行:数组

我确信数据库中存在hashedCardName ='9e326d217f275a19ba1df92cb64be771'的现有值,不太确定已将列hashedCardName编入索引。 可能是该列尚未编入索引或我在代码中做错了什么?

P.S。 我也尝试使用$ stmt = $ this-&gt; DBH-&gt;你可以在我留下的一些评论中看到prepare()和execute()。

1 个答案:

答案 0 :(得分:0)

Contains不起作用。试试LikeInstr

SELECT * FROM Cards 
WHERE hashCardName like '$hashed_text';

SELECT * FROM Cards
WHERE INSTR(hashCardName, '$hashed_text');

SqlFiddle here