【问题标题】:PHP MySql fetch json no contentPHP MySql 获取 json 没有内容
【发布时间】:2016-08-30 20:58:30
【问题描述】:

我从 db 获取结果并转换为 json 时遇到问题。在我的 API 调用中,它给了我返回正文的空内容(完全空白),状态为 200。

这是我的代码:

    $weekAndYear = $year."/".$week; // incoming params as e.g "2016/19"

    $stmt = $this->db->prepare("SELECT r.*, p.code FROM report r, product p WHERE "
            . "r.pid=p.pid AND r.product=:productCode "
            . "AND r.status='Published' AND r.pid=25 AND r.week=:weekAndYear");
    $stmt->bindparam(":productCode", $productCode);
    $stmt->bindparam(":weekAndYear", $weekAndYear);
    $stmt->execute();

    while($price=$stmt->fetch(PDO::FETCH_ASSOC)) {
        //echo $price;
        $arr_price[] = $price;
     }


    $data['priceReport'] = $arr_price;


    //echo $weekAndYear;
    $data['status'] = "OK";

    return json_encode($data);

当我在我的 phpmyadmin mysql 服务器中测试查询时,它工作正常。

在我的 php 方面,不同的 $weekAndYear 参数会有一些运行良好,而有些则不行。数组部分有什么问题吗?

我的 API 响应标头:

   Cache-Control →no-store, no-cache, must-revalidate, post-check=0, pre-   
   check=0
   Connection →Keep-Alive
   Content-Length →0
   Content-Type →application/json
   Date →Thu, 05 May 2016 06:49:28 GMT
   Expires →Thu, 19 Nov 1981 08:52:00 GMT
   Keep-Alive →timeout=5, max=100
   Pragma →no-cache
   Server →Apache/2.4.18 (Unix) LibreSSL/2.2.6 PHP/5.5.31
   X-Powered-By →PHP/5.5.31

这几天我一直在挠头,现在我只剩下几根头发了。

请帮忙。谢谢你。

【问题讨论】:

  • 您是否尝试记录 $data 变量以查看它是否为空?
  • 因为你没有使用任何函数所以写 echo json_encode($data);
  • 这是用 php 类编写的,这就是我使用 return 的原因,但在我的另一个函数中,return 和 echo 效果很好。在 $weekAndYear 参数上,当我更改为 2016/18 时它可以工作,但是当我输入 2019/19 时它没有,2016/17 它可以工作,......有些工作正常但有些不是。但对于所有这些,查询在 phpmyadmin 方面工作正常。
  • 当我的最后一根头发站立时,我发现表中的一列中有一个字符串值包含特殊字符:ºÚ×Ö,这导致我返回的 API 响应出现奇怪的行为.好吧,我通过只选择我想从表中抓取的列来克服这个问题。 Hoever 将发布有关如何解决此问题的答案。类似 array_map('utf8_encode', $arr)...

标签: php mysql json api fetch


【解决方案1】:

我假设(可能是错误的)您的代码 sn-p 不是函数。 将最后一行从 return 改为 echo 如下:

echo json_encode($data);

【讨论】:

  • 我已经测试过了,但它不能解决问题。 echo 和 return 做同样的事情,它工作正常。
【解决方案2】:

除非第一个代码sn-p是函数,否则需要使用json_encode而不是return语句。

Fetch 可以获取任何类型的内容,甚至是 HTML。 PHP 所做的是生成内容并将其写入文件并将其发送到浏览器。当您使用 PHP 生成 HTML 时,您不会返回它,而是将其 echo 到页面。

同样的事情发生在 AJAX 上。您使用 PHP 将数据写入文件并提供服务。

所以替换这个:

return json_encode($data);

用这个:

echo json_encode($data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 2023-03-07
    • 2016-04-23
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    相关资源
    最近更新 更多