Вставить объект Json в базу данных в PHP - PullRequest
0 голосов
/ 11 февраля 2019

Я работаю над приложением для Android, которое использует API, созданные с помощью php.Здесь я динамически создаю столбцы и их значения.

Я проверяю API через почтальона, и каждый раз происходит странная вещь. В то время как я выполняю цикл по объекту Json, я сначала создаю столбец, а затем вставляю его значения.Проблема в том, что только 1-я итерация сохраняет элемент, а остальные из них только создают столбец, но не вставляют значения.Я не знаю, делаю ли я что-то не так, ниже мой 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 голосов
/ 11 февраля 2019

Имя второго столбца - Trans.No., которое содержит точку, поэтому оно терпит неудачу, возможно, в результате возникла ошибка, которая препятствует созданию других столбцов.

Я думаю, что это будет многолучше иметь таблицу с такой структурой:

атрибуты (id, ключ, значение)

и всякий раз, когда получена пара ключ-значение, вы просто вставляете / обновляете ее, в зависимости от логикиВы должны быть выполнены.Ваша текущая модель создаст отдельную строку для каждого атрибута, что, вероятно, не то, чего вы хотите достичь.

РЕДАКТИРОВАТЬ

На основе информации, полученной в разделе комментариев, я пришел к следующему выводу:

Вы можете сначала создать отсутствующие столбцы, а затем сгенерировать оператор вставки со всеми столбцами, имеющими одну вставку.

Но было бы лучше не создавать отдельный столбец для каждого значения,так как количество столбцов может быстро выйти из-под контроля.Вместо этого вы можете иметь таблицу:

myentity (id, name)

для хранения сущностей, представленных атрибутами JSON и

(id, myentity_id, key, value)

для хранения его атрибутов.Это была бы аккуратная схема со всей той динамикой, которую вы могли захотеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...