【问题标题】:Slim $app->render issues for a JSON APISlim $app->呈现 JSON API 的问题
【发布时间】:2015-09-09 15:49:48
【问题描述】:

这是一个相当简单的 Slim $app->render 问题,但我使用 SQL 查询通过$result 返回表中的总列数,其中存储的数据如下所示:@ 987654322@

我想将其推送到 JSON API,如下所示:

$app->get('/api/total/', function() use ($app) {
  $query = "select count(*) AS total FROM sometable";
  $data = $app->db->query($query);
  $result = $data->fetchAll(PDO::FETCH_OBJ);
  $app->render(
    200, json_encode(array(
      'total' => $result['total']
    ))
  );
});

如何让 Slim 的 $app->render 生成 {total:12345}

执行'total' => $result['total'] 会引发错误,例如:

注意:未定义的索引:总计

【问题讨论】:

  • 需要先将数组转成json,试试json_encode()
  • 您能提供更多细节吗?
  • 此时需要返回值。 $app->render(200, json_encode(array( 'total' => $result['total'] )));
  • 究竟抛出了什么错误?
  • @mgansler 更新我的主要帖子,秒。

标签: php json api slim


【解决方案1】:

这是因为 fetchAll 返回结果数组。您可以改用fetch()。检查 fetch 是否没有失败也很好。但是,在这种特殊情况下,如果 sometable 存在,则不应该。您还使用 fetch_obj 并尝试将其作为错误的数组访问。使用 FETCH_ASSOC 或使用 FETCH_OBJ 并具有适当的对象访问权限。

$app->get('/api/total/', function() use ($app) {
  $query = "select count(*) AS total FROM sometable";
  $data = $app->db->query($query);
  $result = $data->fetch(PDO::FETCH_OBJ);
  if($result !== false) {
    $app->render(
     200, json_encode(array(
      'total' => $result->total
      ))
   );
  } else {
     $app->render(
     404, json_encode(array(
      'error' => 'Not Found'
      ))
   );
  }
 });

还要记住最好设置内容类型

$app->response->headers->set('Content-Type', 'application/json');

如果您需要了解抓取的工作原理,请查看:http://php.net/manual/en/pdostatement.fetch.php

【讨论】:

  • 这会导致致命错误:不能使用 stdClass 类型的对象作为数组
  • 因为它是 fetch_obj 所以你需要使用 fetch 作为数组或使用 $result->total 我已经更新了我的答案
  • 谢谢你,你很有帮助。
猜你喜欢
  • 1970-01-01
  • 2016-08-10
  • 2012-10-20
  • 2020-03-23
  • 2011-08-23
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多