MYSQL报价逃脱仍然返回错误

问题描述 投票:0回答:2
SELECT * FROM `entries` WHERE MATCH(`title`) AGAINST('Linux\'s')
您的SQL语法中有错误;检查与您的MySQL Server版本相对应的手册,以获取正确的语法

我没有最模糊的想法,为什么当报价被逃脱时此错误仍然存在。

PS:上部查询在

PhpMyAdmin

.

中有效。 class SmalllightSearch extends Smalllight { //----- SEARCH BY FIELD VALUE -----\\ public function searchByFieldValue($field, $value, $smart = true, $limit = NULL, array $orderby = NULL) { $value = mysql_real_escape_string($value); $entries = array(); $q = "SELECT * FROM `".$this->table."` WHERE MATCH (`$field`) AGAINST ('$value')"; echo $q; if($orderby != NULL) { $list = array(); foreach($orderby as $k => $v) { array_push($list, '`'.$k.'` '.$v); } $order = implode(', ', $list); $q .= ' ORDER BY '.$order; } if($limit != NULL) { $q .= ' LIMIT '.$limit; } $r = mysql_query($q) or die(mysql_error()); while($row = mysql_fetch_assoc($r)) { array_push($entries, $row); } if($smart == true) { $right = new Smalllight('right'); $wrong = new Smalllight('wrong'); $words = str_word_count($value, 1); foreach($words as $word_key => $word_value) { $find_right = $right->findByFieldValue('value', $word_value); if($find_right == false) { $find_wrong = $wrong->findByFieldValue('value', $word_value); if($find_wrong == true) { $pair_right = $right->findById($find_wrong[0]['right_id']); $words[$word_key] = $pair_right['value']; } else { $pattern_right = $right->findByPattern('value', $word_value, 5, array('occur' => 'DESC')); if($pattern_right == true) { foreach($pattern_right as $pattern_key => $pattern) { similar_text($word_value, $pattern['value'], $similar); if($similar >= 70 && $word_value !== $pattern['value']) { $wrong->setValue('right_id', $pattern['id']); $wrong->setValue('value', $word_value); $wrong->store(); $words[$word_key] = $pattern['value']; } } } } } } $meaning = implode(' ', $words); if($meaning != $value) { $link = implode('+', $words); echo 'Did you mean: <a href="index.php?search='.$link.'">'.$meaning.'</a><br/>'; } return $entries; } elseif($smart == false) { return $entries; } } }

这就是我执行它的方式:
if($_GET['search']) {
        $slight = new SmalllightSearch('entries');
        $entries = $slight->searchByFieldValue('title', $_GET['search']);
        if($entries == true) {
            foreach($entries as $entry) {
                echo '<b>'.$entry['title'].'</b><br/>'.$entry['body'].'<br/><br/>';
            }
        }
        else {
            echo '<br/>No results found for: <b>'.$_GET['search'].'</b>';
        }
    }

以前无需回声,因为未设置限制和订单参数。
	

显然在PHP中不起作用,因为

\'
php mysql escaping quote
2个回答
2
投票
因此,您还需要逃脱斜线

AGAINST('Linux\\\'s')

PS:如果您使用已准备好的语句或至少使用正确使用的逃生功能,则您的MySQL客户端提供了 - 这不是问题。
    

这是PHP代码(一部分):
public function searchByFieldValue($field, $value, $smart = true, $limit = NULL, array $orderby = NULL) {
            $value = mysql_real_escape_string($value);
            $entries = array();
            $q = "SELECT * FROM `".$this->table."` WHERE MATCH (`$field`) AGAINST ('$value')";
            echo $q;

这是输出:

0
投票
选择 *从

entries

中,其中匹配(
title
)与('linux \'s')您在sql语法中有一个错误;检查与您的MySQL Server版本相对应的手册,以获取正确的语法

问题已经解决,我需要在str_word_count()函数中添加'\',以便将\识别为单词的一部分。

$words = str_word_count($value, 1, '\\');
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.