【问题标题】:insert a new row using decoded json string使用解码的 json 字符串插入新行
【发布时间】:2021-01-22 05:13:39
【问题描述】:

$str 是来自客户端的 json 对象字符串
keys 是列名
需要使用准备好的值插入新行 - 即对应的键值对
我该怎么做 - 像这样:

$str = {"fname":"lorem","sname":"ipsum","nick":"dolor"};

function btn_send($str){
    global $db;
    $obj = json_decode($str);
    $sq = "insert into members (...keys) values (...prepared_values)";
    $st = $db->prepare($sq);
    $st->execute([...]);
}

【问题讨论】:

  • 查看 ORM,pdo 或 mysqli 库无法做到这一点。
  • @nice_dev - 即$str
  • @qadenza 啊,忽略了这一点。那么,该 json 中的键是表的列名吗?
  • @nice_dev - 是的,就是这样

标签: php mysql json


【解决方案1】:
<?php


$str = '{"fname":"lorem","sname":"ipsum","nick":"dolor"}';

function btn_send($str){
    global $db;
    $data = json_decode($str,true);
    $column_names = "`". implode("`,`",array_keys($data)) . "`";
    $prepared_chars = implode(",",array_fill(0,count(array_values($data)),'?'));
    $sq = "insert into members ($column_names) values ($prepared_chars)";
    $st = $db->prepare($sq);
    $st->execute(array_values($data));
}

您可以从 json 键中创建列名,并使用许多 ? 占位符作为这些键的值。在执行准备好的查询时,您可以只提供值。

【讨论】:

  • $st = $db-&gt;prepare($sq); 出现语法错误 - 可能是前一行
  • @qadenza 好的,$sq 在回显时显示什么?
  • @qadenza 现已修复。我漏掉了一个逗号。
  • 完美运行。非常感谢。似乎 php 为此需要一个本机函数
  • @qadenza 没错,PHP 显然需要提供这个。
猜你喜欢
  • 2020-06-02
  • 2019-04-03
  • 2017-04-02
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多