【问题标题】:PHP/MySQL returning no result on some queriesPHP/MySQL 对某些查询不返回任何结果
【发布时间】:2018-04-24 13:47:45
【问题描述】:

我知道这不是一个新问题,但是在使用不同参数运行相同查询时,结果之间存在不一致:

问题从这个查询开始(从脚本日志复制粘贴):

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

知道发生了什么吗?并提前感谢!

【问题讨论】:

  • 好像是编码问题
  • 你设置mysqli连接的字符集了吗?
  • 向我们展示您的数据库连接代码(删除密码)
  • @RiggsFolly 你在考虑Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;CharSet=utf8; 连接字符串吗?
  • 是的,这就是我想看到的。我是否在某处的代码中错过了这一点? @Cid

标签: php mysql mysqli


【解决方案1】:

正如许多人指出的那样,这是一个编码问题,数据库在 latin1 中,代码在 utf8 中,在发送之前在查询中使用 utf_decode 解决了我的问题。

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多