为啥数组响应没有使用 PHP MySQL API 进入 JSON
Posted
技术标签:
【中文标题】为啥数组响应没有使用 PHP MySQL API 进入 JSON【英文标题】:Why array response not getting in JSON with PHP MySQL API为什么数组响应没有使用 PHP MySQL API 进入 JSON 【发布时间】:2020-06-10 02:33:27 【问题描述】:我正在开发一个带有php
和mysql
数据库的API,它在其中接收POST
参数并将响应作为JSON
发回。我正在使用应该返回 3 行数组的查询和相关参数,但它没有返回单行。这是应该返回的记录
+--------+-------------------+------------+------+----------+
| rollno | sub | date | year | presenty |
+--------+-------------------+------------+------+----------+
| 12 | Maths | 02-10-2019 | 2 | p |
| 12 | Physics | 02-10-2019 | 2 | p |
| 12 | Computer Networks | 02-10-2019 | 2 | a |
+--------+-------------------+------------+------+----------+
获取这个的代码如下:
$response = array();
if(isset($_POST['year']) && isset($_POST['rollno']) && isset($_POST['date']))
$year = $_POST['year'];
$rollno = $_POST['rollno'];
$date_tmp = date_create($_POST['date']);
$date = date_format($date_tmp,'d-m-Y');
$att = array();
$fetchatt = $conn->query("SELECT * FROM attendance WHERE year=".$year." AND rollno=".$rollno." AND date=".$date);
while($row = $fetchatt->fetch_assoc())
$att[] = array('sub'=>$row['sub'],
'presenty'=>$row['presenty']);
$response['att'] = $att;
$response['error'] = false;
$response['message'] = "Retrieval Successful";
echo json_encode($response);
我发送POST
参数(使用ARC REST客户端chrome扩展)如下:
rollno: 12
year: 2
date: 02-10-2019
作为回应,我只得到这个
"error":false,"message":"Retrieval Successful"
相反,响应还应包含上述匹配记录的数组
【问题讨论】:
您正在覆盖响应数组中 $att 的值 @AhmedAli 我在另一个文件中使用了相同的技术,并且正在工作 警告!您对 SQL 注入攻击敞开心扉!您应该使用参数化的prepared statements,而不是像这样直接在查询中使用完全未转义的用户数据。 日期格式看起来取决于文化。您是否尝试使用以下日期格式:YYYY-MM-DD? 试试这个 -$fetchatt = $conn->query("SELECT * FROM attendance WHERE year=".$year." AND rollno=".$rollno." AND date='".$date."');
。 $date
应该是单引号。
【参考方案1】:
试试这个 -
$fetchatt = $conn->query("SELECT * FROM attendance WHERE year=".$year." AND rollno=".$rollno." AND date='".$date."');
。
$date
应该是单引号。
【讨论】:
警告! 使用此代码,您将对SQL injection 攻击敞开大门!您应该使用参数化的prepared statements,而不是像这样直接在查询中使用完全未转义的用户数据。 sman,请记住@Magnus 的建议并相应地修改您的查询。 我建议您编辑答案以确保安全。展示真正的解决方案。现在它说 “试试这个”,然后在 cmets 中你基本上是在说,“但你不应该这样做”。【参考方案2】:验证您的 SQL 查询的外观是一种很好的做法,尤其是在取决于用户输入的情况下。尝试将查询记录到文件中,然后打开该文件并使用 MySQL Workbench 或 PHPMyAdmin 检查查询,甚至将它们输出到页面(仅在测试环境中)。这可以防止代码中出现明显的语法错误。
另外我建议您为您的网站启用错误日志记录
【讨论】:
请进一步解释所有这些如何帮助解决问题 据我了解,问题在于查询中的语法错误,该代码可能会引发错误。通过记录此类错误,您可以了解出了什么问题,通过查看实际查询,您可以检测到语法错误 那么,单独记录查询并不能解决问题?那么为什么不在答案中添加一些东西呢? ;) 如果问题的作者添加了查询或错误的日志记录,他会很快发现该查询存在问题 如果你已经知道了,为什么不帮忙解决这个问题呢?以上是关于为啥数组响应没有使用 PHP MySQL API 进入 JSON的主要内容,如果未能解决你的问题,请参考以下文章
我想使用免费的 YouTube 到 mp3 API,但我只有字符串作为响应。我如何在对象/json/数组中传输响应? PHP