【问题标题】:How to save a "complete" JSON response in a postgres field with PHP [closed]如何使用 PHP 在 postgres 字段中保存“完整”的 JSON 响应 [关闭]
【发布时间】:2021-03-09 08:59:42
【问题描述】:

所以我已经阅读了几个线程,其中人们谈论如何在数据库中保存 JSON 响应,但我找不到与我的具体案例相关的线程。

我有一张表格,我想在表格的一个字段中保存原始、完整的 json 响应。该表还有其他字段。

这是表的结构: id, (int) result_date, (date) result_json,(不知道是用json还是text,都试过了)

所以,对我来说,这看起来是一项相当容易的任务,但我不断收到错误,只有一些结果实际保存在数据库中,有些结果出错。

我得到的错误是: 错误异常 Warning: pg_query_params(): Query failed: ERROR: invalid input syntax for type json DETAIL: Token "names" is invalid.

代码为:

$json = file_get_contents('php://input');

$jsonInsert = pg_escape_string($json);

$result_update_keyword_data = pg_query_params($db, "UPDATE table_json SET result_json = $1 WHERE id = $2 AND result_date = CURRENT_DATE", array($jsonInsert, $id));

【问题讨论】:

  • 检查您的json 是否有效(语法),在 jsonlint.com(其他可用)。如果没有,请修复 json 的数据源。
  • 这里的问题是什么?如果您应该使用jsontext?如果数据始终是有效的 JSON(显然不是),则使用 json(甚至更好的 jsonb),但如果数据可以是有效 JSON 以外的其他内容,但您仍想存储它,则使用 text。跨度>
  • 问题是我猜。源是有效的 json。我尝试同时使用“text”和“jsonb”作为字段类型,但仍然出现该错误。
  • pg_escape_stringpg_query_params 的组合一开始没有多大意义。
  • @CBroe 对我帮助不大。能详细点吗?

标签: php json postgresql


【解决方案1】:

正如@CBro 提到的,我不小心使用 pg_query_params “伪造”了我的数据。我将其更改为 pg_query 并且效果很好。

$result_insert_keyword_data = pg_query($db,"INSERT INTO table_json(keyword_id,result_date,result_json) VALUES('".$id."', CURRENT_DATE,'".$jsonInsert."')");

我使用 JSONB 作为数据库字段类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-26
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多