【问题标题】:Insert Json object to database in php在php中将Json对象插入数据库
【发布时间】:2019-02-11 19:03:57
【问题描述】:

我正在开发一个使用 php 制作的 API 的 android 应用程序。在这里,我正在动态创建列及其值。

我正在通过邮递员验证 API,每次都会发生奇怪的事情,在循环 Json 对象时,我正在做的是首先创建列,然后插入其值。 问题是只有第一次迭代保存元素,其余的只创建列但不插入值。不知道是不是我做错了,下面是我的php代码。

<?php
include("connection.php");
$data = file_get_contents('php://input');
$json_data = json_decode($data);



    foreach($json_data as $key => $val) {
       $column_name = $key ;
      $c_column_name = preg_replace('/[^a-zA-Z]+/', '', $column_name);
       $column_value = $val ; 
       $table_name = "test2";
       $email = "ht@t.com";



    $result = mysqli_query($conn,"SHOW COLUMNS FROM $table_name LIKE '$c_column_name'");
    $exists = (mysqli_num_rows($result))?TRUE:FALSE;
     if($exists) {
        $query1 = "INSERT INTO  $table_name($c_column_name)VALUES('$column_value') ";
        $data0=mysqli_query($conn,$query);
           if($data0)
          {
           echo json_encode(array("success"=>"true - insertion","message"=>"Column existed, Successfully data sent.")); 
          }
          else{
          echo json_encode(array("success"=>"false - insertion","message"=>"Column existed,  data not inserted.")); 

          }
    }

    else{

      $query2="ALTER TABLE $table_name ADD COLUMN `$c_column_name` varchar(50) NOT NULL";

      $data1=mysqli_query($conn,$query2);
      if($data1){

         $query3="INSERT INTO  $table_name($c_column_name)VALUES('$column_value')";
          $data2=mysqli_query($conn,$query3);
          if($data2)
          {
          echo json_encode(array("success"=>"true - insertion","message"=>"Successfully data sent.")); 
          }
          else{
          echo json_encode(array("success"=>"false - insertion","message"=>"Column created but data not inserted.")); 

          }
      }

      else
      {
            echo json_encode(array("success"=>"false - column creation","message"=>"Failed to create column.'$column_name', '$table_name', '$conn'"));
      }
    }
    }
?>

这里是通过邮递员的 Json 对象。

{"Shape":"rewq","Trans.No.":"yuuiop","Color":"qwert"}

请帮助我,非常感谢任何帮助或建议。

【问题讨论】:

  • 这听起来对我来说更适合面向文档的数据库。
  • 好吧我明白了,我们不能在 sql 中这样做吗?我们能想到
  • $json_data = json_decode($data, true);
  • 当然。尽管这取决于您要达到的目标。数据库模式的运行时操作不是我通常推荐的路径。取决于数据库版本的另一个选项是简单地存储数据 as json。或者使用 id 表将它们绑定在一起的简单键值表是另一种选择。
  • 我尝试将其转换为数组,但并没有太大帮助,我认为在我设置(true)@Anuga 后,我的逻辑需要在下面进行更多更改

标签: php json postman


【解决方案1】:

第二列名称是Trans.No.,其中包含一个点,这就是它失败的原因,可能是您遇到错误,导致无法创建更多列。

我认为有一个这种结构的表会更好:

属性(id、key、value)

每当收到键值对时,您只需插入/更新它,具体取决于您需要执行的逻辑。您当前的模型将为每个属性创建一个单独的行,这可能不是您想要实现的。

编辑

根据评论部分收到的信息,我得出以下结论:

您可以先创建缺少的列,然后生成包含所有列的插入语句,只有一个插入。

但最好不要为每个值创建单独的列,因为列的数量很快就会失控。相反,你可以有一张桌子:

myentity(id, name)

用于存储由 JSON 表示的实体和

属性(id, myentity_id, key, value)

用于存储其属性。这将是一个简洁的架构,具有您想要的所有活力。

【讨论】:

  • 嘿,感谢您关注这个问题,Trans。我之前有过,并用 ** $c_column_name = preg_replace('/[^a-zA-Z]+/', '', $column_name);**
  • @prashantkumarsingh 请告诉我 $column_name 和 $c_column_name 在每种情况下的值是多少。
  • 另外,我只是尝试添加 {"Color":"BLK"} 它添加列和值然后我尝试 {"Supplier":"Shed"} 它无法插入数据只创建列跨度>
  • ex: column_name = Trans.No.删除所有字符后 c_column_name = TransNo
  • 我想要的是如果我的对象是 {"Shape":"rewq","Trans.No.":"yuuiop","Color":"qwert"} 然后想要一个单独的行对于这个对象,其中键作为列,值作为列值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 2011-01-24
  • 1970-01-01
相关资源
最近更新 更多