MySQL MATCH AGAINST - 处理单引号

时间:2015-11-16 01:06:27

标签: mysql search full-text-search

我刚学习MySQL中的MATCH .. AGAINST,并且意图使用它,因为我了解它的基础知识。我遇到了一些遗留代码,希望得到一些反馈。这是:

foreach( $validSearchWords as $word ) { //this is a cleaned array of the user query phrase
    $mycount++;

    // uses a special character
    if (strpos($word,"'")) {
        $wordCriteria['keyword'] .= '"'.$word.'"'; //really? can't be right!
        // if only one search term
    } elseif ($vcount == $mycount) {
        $wordCriteria['keyword'] .= $word.'*';
        // if term is second or higher
    } else {
        $wordCriteria['keyword'] .= $word.'* ';
    }
}

我理解在这里尝试的是什么但我怀疑第一个逻辑块不正确。

Texas State University将成为:Texas* State* University* BUT John O'Malley High School将成为“John *”O'Malley“High * School *

这可能不对,我认为程序员的操作不正确,因为:

a)奥马利之后没有空间

b)他们因为单引号似乎很奇怪而失去了外卡。如果他们真的打算使用外卡那么它应该是这样的,对吗?

John* O'Malley* High* School*

更新 更简洁的问题是,“你如何使用带有通配符的O'Malley单引号来表示单词?

此:

SET @keyword='O\'malley*';
SELECT * FROM all_schools WHERE match (school_name) against (@keyword IN BOOLEAN MODE);

只给我Malley的结果,这是我不想要的。我希望O'MalleyO'Malleygough(如果存在)

1 个答案:

答案 0 :(得分:0)

您应该可以使用.tar.gz''转义单引号。

\'

更好的解决方案是使用mysqli::escape_string()PDO::quote()