【问题标题】:Invalid data array response in Advanced Rest ClientAdvanced Rest Client 中的无效数据数组响应
【发布时间】:2017-06-24 23:25:30
【问题描述】:

我正在尝试在 PHP 中构建一个“API”,它可以采用 JSON 数据数组,将其转换为 PHP 数据,然后更新 MySQL 数据库。将数据直接发布到脚本可以正常工作,就像通过 cURL 运行它一样,但是在使用 Google Chrome 的“高级 Rest Client”应用程序时,我似乎无法获得响应。

我收到一条 Status: 200 OK 消息,但 Raw/Parsed 响应只显示“无效数据数组”。

这是有问题的脚本:

<?php
$api = json_decode($_POST['api'], true);

$api['ExhibitorData'] = array_values($api['ExhibitorData']);
$data = $api['ExhibitorData'][0];
$exhibitor_id = $data['exhibitor_id'];

require_once 'config-api.php4'; // database connection

// get some data based on $exhibitor_id

$do_update = mysql_query("UPDATE table SET ... WHERE exhibitor_id = $exhibitor_id");
if (!$do_update)
{
    http_response_code(404);
    die(mysql_error());
}
$do_another_update = mysql_query("UPDATE another_table SET ... WHERE exhibitor_id = $exhibitor_id");
if (!$do_another_update)
{
    http_response_code(404);
    die(mysql_error());
}

$log = mysql_query("INSERT INTO log SET exhibitor_id = $exhibitor_id, ip_address = '" . $_SERVER['REMOTE_ADDR'] . "', updated_at = NOW()");

header('Content-Type: application/json; charset=utf-8');
echo json_encode(array(mysql_insert_id() => 'OK'));

mysql_close();

按照有关创建自己的 REST API(即this one)的在线教程,我似乎做的一切都是正确的,但我似乎无法获得回应。

还有什么我应该做的吗?

编辑:这是我传递给脚本的 JSON 字符串的结构:

{
    "ExhibitorData": {
        "1": {
            "exhibitor_id": 1,
            ...
        }
    }
}

【问题讨论】:

  • 您在上次查询调用中也缺少错误处理。这似乎是错误的,因为在 INSERT 语句中,您不使用 SET,而是使用 VALUES。与问题不太相关,但是您使用的是什么 php 版本?我对 .php4 扩展名有点困惑。此外,您不应使用已弃用的 mysql_* 扩展名。相反,请使用改进的mysqli extension。
  • @TanuelMategi 哦,我们在 v5.x 上,但是服务器上到处都是 .php4 扩展名和大约十年前以前的开发人员的 mysql_* 代码。这只是我必须处理的事情。
  • 忽略我说你应该使用VALUES而不是SET的地方,我再次查找语法,显然SET也是有效的:S但仍然进行错误处理;)

标签: php mysql json rest


【解决方案1】:

我设法找出了问题所在。

当您正常发布数据时,您可以通过$_POST 变量访问它。然而,它似乎使用 cURL,尽管它说它会发布数据,但您实际上需要以不同的方式访问它。

改变这一行:

$api = json_decode($_POST['api'], true);

到这里:

$api = json_decode(file_get_contents('php://input'), true);

然后让脚本的其余部分正常运行。

【讨论】:

    猜你喜欢
    • 2019-09-14
    • 2011-09-01
    • 2020-01-23
    • 2017-12-20
    • 2021-02-06
    • 2013-06-20
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多