使用PHP的MySQL Query中的JSONArray不适用于复杂的查询

时间:2015-11-22 16:37:35

标签: php mysql arrays json

我有一个PHP scirpt从MySQL查询返回JSONAray。它适用于大多数查询,但我需要从特定的长查询得到结果。

这是PHP函数脚本:

public function getTopRecipes() {
    $myArray = array();
    if ($result = $this->conn->query("SELECT recipe.`unique_id`, recipe.`title`, recipe.`img_tumbnail_link`, recipe.`add_date`, recipe.`kitchen_type`, recipe.`meal_type`, user.`name`, user.`surname`, COUNT(`like`.`recipe_unique_id_fk`) AS like_count
        FROM `recipe`
        JOIN `like` ON (recipe.`unique_id` = `like`.`recipe_unique_id_fk`)
        JOIN `user` ON (user.`unique_id` = recipe.`user_unique_id_fk`)
        WHERE recipe.`acceptance` = '1' 
        GROUP BY `like`.`recipe_unique_id_fk`
        ORDER BY like_count DESC")) {
        while ($row = $result->fetch_array(MYSQL_ASSOC)) {
            $myArray[] = $row;
        }
        echo json_encode($myArray);
    }
    $result->close();
}

此脚本返回没有任何JSON数据的空白页面。但是,从phpMyAdmin获取结果时,此脚本运行完美。这是一个例子:

enter image description here

我不知道出了什么问题:/你们可以帮助我吗?谢谢。

2 个答案:

答案 0 :(得分:0)

当查询有效但脚本没有时,问题出在@ anton86993提到的JSON编码中。

检查结果中的任何特殊字符。这些可能包括变音符号,法语口音等。

要确认这一点,请用简单的字符串替换结果的内容并运行代码。

答案 1 :(得分:0)

我解决了。问题在于文本编码。如果从MySQL获取数据,则必须记住在获取数据之前使用 mysqli :: set_charset()函数将默认字符集设置为UTF-8。如果有人遇到同样的问题,这是最终的代码。

public function getTopRecipes() {
    $myArray = array();
    $this->conn->set_charset("utf8");
    if ($result = $this->conn->query("SELECT recipe.`unique_id`, recipe.`title`, recipe.`img_tumbnail_link`, recipe.`add_date`, recipe.`kitchen_type`, recipe.`meal_type`, user.`name`, user.`surname`, COUNT(`like`.`recipe_unique_id_fk`) AS like_count
        FROM `recipe`
        JOIN `like` ON (recipe.`unique_id` = `like`.`recipe_unique_id_fk`)
        JOIN `user` ON (user.`unique_id` = recipe.`user_unique_id_fk`)
        WHERE recipe.`acceptance` = '1' 
        GROUP BY `like`.`recipe_unique_id_fk`
        ORDER BY like_count DESC")) {
        while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
            $myArray[] = $row;
        }
        echo json_encode($myArray); 
    }
    $result->close();
}