MySQL 子查询未进入 PHP 中的数组

问题描述 投票:0回答:2

我有以下 PHP API,它运行 MySQL 查询,当;

$sql = "select article_id, title, summary, image_url from articles limit 20"; 

我得到以下结果;

http://ec2-54-152-162-157.compute-1.amazonaws.com/list_view.php?user_id=1

以上是我想要的输出格式。

但是,当我将 $sql 更改为下面时,我得到一个空白屏幕;

$user_id = $_GET["user_id"];

$sql = "
select article_id, title, summary, image_url 
from articles 
where article_id in 
    (
    select max(article_id) as last_article_id 
    from articles as a 
    join media_sources as ms 
    on a.rss_source_id = ms.media_source_id 
    where article_id not in 
        (
        select article_id 
        from responses 
        where (activity_id = 1 and response = -1 and user_id = '1') 
        or (activity_id = 2 and user_id = '1')
    ) 
    group by category
) limit 20;"

$db = new  mysqli("remotehost", "user", "password", "db_name");
$results = $db->query($sql);
$articles["items"] = array();

while($article = $results->fetch_assoc()){
    $item = array ();
    $item["article_id"] = $article['article_id'];
    $item["article_title"] = $article['title'];
    $item["article_summary"] = $article['summary'];
    $item["article_image"] = $article['image_url'];
    array_push($articles["items"], $item);
    //echo json_encode($item);
}
echo json_encode($articles);

我已经取消注释了代码底部第三行中的 echo json_encode($item) ;并将其放入下面的 API 中。所以有数据,但我无法获得我需要的格式。

http://ec2-54-152-162-157.compute-1.amazonaws.com/list_view2.php?user_id=1

****************************************编辑**************** ******************************

json_last_error_msg() 返回:

Malformed UTF-8 characters, possibly incorrectly encoded. 

所以我猜有些字符无法用 Json 编码,我将不得不调查并删除它们。但仍然不确定为什么这个有效,因为它是相同的数据被编码;

echo json_encode($item);
php mysql charset
2个回答
0
投票

如果它在 MySQL 控制台上工作,那么问题很可能是 PHP 脚本用于连接的凭据(也许它无法访问某些内容)。 是同一个用户吗? php 用户是否有权创建临时表并访问所需的所有数据?

或者可能需要很长时间并且出错。你在 php 中使用哪个命令? 尝试回显您返回的错误或检查日志。 如果失败,它会告诉您失败的原因。

如果是 php,我认为是 mysql 用户权限、php max_execution 设置、php 最大内存


0
投票

添加此行修复了它;

mysqli_set_charset($db, "utf8");
© www.soinside.com 2019 - 2024. All rights reserved.