PHP / MySQL не возвращает результатов по некоторым запросам - PullRequest
0 голосов
/ 24 апреля 2018

Я знаю, что это не новый вопрос, но у меня несоответствие между результатами при выполнении одних и тех же запросов с различными параметрами:

Проблема начинается с этого запроса (копия вставлена ​​из журнала сценариев):

SELECT id 
FROM Resources 
WHERE group_id IN (2,3,1) 
AND MATCH (title, body) AGAINST ('diseño' IN NATURAL LANGUAGE MODE) 
LIMIT 10

, который ничего не выводит, num_rows равен 0, и любые попытки его анализа не удаются.Любопытно, что если я вставлю тот же запрос в phpMyadmin, он выдаст 9 результатов.

теперь это рабочий запрос из точно такой же функции и процесса:

SELECT id 
FROM Resources 
WHERE group_id IN (2,3,1) 
AND MATCH (title, body) AGAINST ('moda' IN NATURAL LANGUAGE MODE) 
LIMIT 10

Это выдает 10 результатов.и работает нормально.

Это мой код:

public function loadFromSearch($searchStr, $resourceGroupIdList){
    //$searchStr2 = NaturalLanguageHelper::mb_replace('n', 'ñ', $searchStr);

    $dbConn = new DbConnection();
    $query = $dbConn->escapeQuery("SELECT {$this->DB_ID} FROM {$this->DB_TABLE_NAME} WHERE {$this->DB_GROUP_ID} IN ({$resourceGroupIdList}) AND MATCH ({$this->DB_FULLTEXT_INDEX}) AGAINST ('%s' IN NATURAL LANGUAGE MODE) LIMIT 10", $searchStr);

    Log::echo("\n". $query . "\n\n");

    $result = $dbConn->newQuery($query);
    return $this->fillArrayFromResult($result, array('title'));
}

Это вызывает эту функцию:

protected function fillArrayFromResult($result, $column_list_array = false) {
        Log::echo("\nnum rows: {$result->num_rows}\n\n");
        if($result->num_rows == 0)return false;
        while($row = $result->fetch_array(MYSQLI_NUM)){

            Log::echo("\n\nGot Row! Creating instance of ".$this->class."...\n");

            $instance = new $this->class();

            Log::echo("\n\n Instance OK\n");

            if(!is_array($column_list_array))
                $instance->loadFromDb($row[0]);
            else
                $instance->loadFromDbPartial($column_list_array, $row[0]);

            array_push($this->collection, $instance);
        }
        $result->free();
        return true;
    }

А вот функция запроса:

public function newQuery($query){
        if ($result = $this->mysqli->query($query))
            return $result;
        else
            ErrorHandler::throwError("MySQL Query Error: (" . $this->mysqli->errno . ") " . $this->mysqli->error);
    }

Есть идеи, что происходит?и заранее спасибо!

1 Ответ

0 голосов
/ 24 апреля 2018

Как отмечали многие, это была проблема с кодировкой, база данных находится на латинице 1, а код в utf8, с использованием utf_decode в запросе перед отправкой он решил мои проблемы.

Спасибо всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...