【问题标题】:How to insert new rows into database from a submitted json string?如何从提交的 json 字符串将新行插入数据库?
【发布时间】:2021-02-05 03:50:52
【问题描述】:

我无法在 PHP 中解码和插入数组数据。我尝试了decodeforeach 之类的功能,但没有任何效果。

$_POST['area'] 数据:

[area] => [{"text":"DATA1"},{"text":"DATA2"},*,{"text":"DATA3"}]

我是 PHP 新手,如何使用 pdo 的预处理语句将这些数据行插入到我的数据库中?

$area = $_POST['area'];
foreach ($area as $data) {
    echo json_decode($data);
}

echo json_decode($area);

但它不回显。

最后,我想用这个数据:

$stmt = $con->prepare(INSERT INTO `table` (`areas`) VALUES(:data));
$stmt->execute(array($data));

【问题讨论】:

  • 你需要先解码数据-foreach (json_decode($area,true) as $data) {
  • 你需要json_decode($area, true) 你尝试迭代它之前

标签: php arrays json pdo decode


【解决方案1】:

您的 json 格式不正确。要做到json_decode();,您需要正确的 json 格式

$post['area'] = [{"text":"DATA1"},{"text":"DATA2"},*,{"text":"DATA3"}];

改成

$post['area'] = [{"text":"DATA1"},{"text":"DATA2"},{"text":"DATA3"}];

然后做

$ex = json_decode($data, true);

【讨论】:

  • 如果代码的唯一问题是从输入中删除无效字符,那么您可以尝试使用 stackoverflow.com/q/40054253/2943403 之类的内容来关闭问题,也就是说您推荐的 $post 声明无效php
【解决方案2】:

首先,由于*,,您的 json 字符串无效。

$_POST['area'] = '[{"text":"DATA1"},{"text":"DATA2"},*,{"text":"DATA3"}]';
//                        uh oh, not valid json -----^^

所以我假设这是一个发布错误并使用以下输入数据运行:

$_POST['area'] = '[{"text":"DATA1"},{"text":"DATA2"},{"text":"DATA3"}]';

这意味着在你可以迭代$_POST['area']之前,你必须json_decode()它。 (Demo)

应该在进入循环之前声明一个不变的准备好的语句——它被设计为反复使用。

值到占位符的绑定和查询的执行将在内部循环中完成。

$stmt = $con->prepare(INSERT INTO `table` (`areas`) VALUES(?));
foreach (json_decode($_POST['area']) as $obj) {
    $stmt->execute([$obj->text]);
}

【讨论】:

  • 你没有提到他不正确的json_format。
  • 海报经常“yatta-yatta”他们的样本输入。不管这种不准确,问题本身仍然很清楚。我忽略了这个 json 无效子字符串,以便可以提供解决方案。
【解决方案3】:

使用这个:

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

您不能在 PHP 中回显数组。你必须使用var_dump() 函数来做到这一点。 祝你有美好的一天;)。

【讨论】:

  • 但是我们如何在数据库插入函数中添加
  • 如果您想将 JSON 保存在 DB 中。你有2个选项。 optionon1 如果要查询区域 json 中的值,则必须设置区域字段类型 json 和 json_encode ,然后再将其传递给 insert 。选项2你只想保存它而不想查询它你可以为区域设置文本字段类型。
  • [area] => [{"text":"DATA1"},{"text":"DATA2"},*,{"text":"DATA3"}] 这是不正确的json 格式,所以不解码。
猜你喜欢
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 2021-11-20
  • 2019-07-18
  • 2021-02-19
  • 2020-10-19
相关资源
最近更新 更多