【发布时间】: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中有值吗? -
$genre为foo' or 1=1; --时是否有效?谨防 SQL 注入。 -
我不明白你的意思
-
他的意思是恶意用户可以通过 $gender : x"; DROP TABLE GAMES; -- 将这些数据发送到服务器。这样做是在您的查询中注入恶意语句 ()。 = "'.$genre.'"; 将变为:WHERE Genre = "x"; DROP TABLE GAMES; --";
-
您不能只获取 MySQL 结果对象,将资源句柄扔到 HTTP 库中,然后期望对 JSON 进行神奇的转换...