【问题标题】:No JSON Data being returned没有返回 JSON 数据
【发布时间】:2014-01-13 22:33:08
【问题描述】:

我有这个 php GET 函数

function genre_get($genre) {

$this->load->database();
    $sql = 'SELECT games.id, games.title, games.developer, reviews.NoReviews ';
    $sql .= 'FROM games INNER JOIN ';
$sql .= '(SELECT ean, COUNT(*) as NoReviews ';
$sql .= 'FROM reviews GROUP BY ean) reviews ';
$sql .= 'ON games.ean = reviews.ean ';
$sql .= 'WHERE games.genre= "'.$genre.'";';
    $query = $this->db->query($sql);
    $data = $query->result();
$info->games=$data;
$this->response($data, 200);
 }

虽然没有错误,但它没有输出任何 JSON 数据。在 mysql 命令提示符中使用 sql 语法会生成一个表,但是在 apigee 控制台上使用它不会返回任何内容。

我知道上面的 SQL 确实可以使用 MYSQL 并且它确实返回了一个表

 function genre_get($genre) {
     $this->load->database();
        $sql = 'SELECT * FROM games ';
        $sql .= 'WHERE genre = "'.$genre.'";';
        $query = $this->db->query($sql);
        $data = $query->result();
    $info->games=$data;
        $this->response($data, 200);
     }

我之前使用过这个函数,它工作并获得了所需的数据

【问题讨论】:

  • 我认为您需要从请求和响应中发布更多数据。在$this->response 发出数据之前,$data 中有值吗?
  • $genrefoo' or 1=1; -- 时是否有效?谨防 SQL 注入。
  • 我不明白你的意思
  • 他的意思是恶意用户可以通过 $gender : x"; DROP TABLE GAMES; -- 将这些数据发送到服务器。这样做是在您的查询中注入恶意语句 ()。 = "'.$genre.'"; 将变为:WHERE Genre = "x"; DROP TABLE GAMES; --";
  • 您不能只获取 MySQL 结果对象,将资源句柄扔到 HTTP 库中,然后期望对 JSON 进行神奇的转换...

标签: php mysql sql json


【解决方案1】:

结果必须用 JSON FORMAT 编码。您可以使用 de json_encode 函数。

示例: $this->response(json_encode($data), 200);

参考:http://www.php.net/manual/en/function.json-encode.php

【讨论】:

    【解决方案2】:

    取决于您的 JSON 编码器,但您的 SQL 查询可能需要结果列的别名,例如

    SELECT games.id AS id, games.title AS title, games.developer AS developer, reviews.NoReviews AS NoReviews
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      相关资源
      最近更新 更多