我有一个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获取结果时,此脚本运行完美。这是一个例子:
我不知道出了什么问题:/你们可以帮助我吗?谢谢。
答案 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();
}