将Json对象插入php中的数据库

时间:2019-02-11 09:14:39

标签: php json postman

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

我正在通过邮递员验证API,每次都会发生奇怪的事情,在遍历Json Object时,我要做的是首先创建列,然后插入其值。 问题在于,只有第一个迭代会保存元素,而其余的元素只会创建列,而不会插入值。我不知道我做错了什么,下面是我的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"}

请帮助我,非常感谢您的帮助或建议。

1 个答案:

答案 0 :(得分:0)

第二个列名是Trans.No.,其中包含一个点,这就是为什么它失败的原因,可能是由于错误导致无法创建其他列。

我认为使用具有这种结构的表会更好:

属性(ID,键,值)

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

编辑

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

您可以先创建缺少的列,然后使用单个插入项生成所有列的插入语句。

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

myentity(id,name)

用于存储JSON表示的实体和

属性(id,myentity_id,键,值)

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