簡體   English   中英

PHP / MySQL在某些查詢上未返回任何結果

[英]PHP/MySQL returning no result on some queries

我知道這不是一個新問題,但是在使用不同參數運行相同查詢時,結果之間存在不一致之處:

問題始於以下查詢(從腳本日志粘貼的副本):

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);
    }

知道發生了什么嗎? 並預先感謝!

許多人指出這是一個編碼問題,數據庫位於latin1中,代碼位於utf8中,在發送查詢之前在查詢中使用utf_decode解決了我的問題。

謝謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM