【发布时间】: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)...