Php не вставляет и не обновляет ключ обновления сразу от JSon до MySQL - PullRequest
0 голосов
/ 16 мая 2018

Я хочу вставить новые записи из файла Json в базу данных или обновить существующую новыми значениями. У меня есть таблица MySQL (tbl_sales), где id равно primarykey:

+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| sale_item       | varchar(20) | NO   |     | NULL    |       |
| sale_qty        | int(11)     | NO   |     | NULL    |       |
| row_inserted_on | datetime    | NO   |     | NULL    |       |
| last_edited_on  | datetime    | YES  |     | NULL    |       |
| id              | int(11)     | NO   | PRI | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+

У меня есть данные в файле JSon, которые можно вставить или обновить в этой таблице с помощью php

php код:

<?php
    $connect = mysqli_connect("localhost", "root", "", "mytest");
    $query = '';
    $table_data = '';
    $filename = "path.json";

    $data = file_get_contents($filename);
    $array = json_decode($data, true); 

    foreach($array as $row) 
    {
      $query = "INSERT INTO tbl_sales(sale_item, sale_qty, row_inserted_on, last_edited_on, id) VALUES ('".$row["sale_item"]."', '".$row["sale_qty"]."', '".$row["row_inserted_on"]."', '".$row["last_edited_on"]."', '".$row["id"]."'); ON DUPLICATE KEY UPDATE sale_item=VALUES('".$row["sale_item"]."'), sale_qty=VALUES('".$row["sale_qty"]."'), row_inserted_on=VALUES('".$row["row_inserted_on"]."'), last_edited_on=VALUES('".$row["last_edited_on"]."')";     

      mysqli_multi_query($connect, $query);       
    }
   echo "<h1>All data appeded </h1>";
?>

Файл Json:

[
{
    "sale_item":"Sugar",
    "sale_qty":"3",
    "row_inserted_on":"2018-05-06 05:25:30",
    "last_edited_on":"2018-05-09 05:26:26",
    "id":"0"
},
{
    "sale_item":"Doll",
    "sale_qty":"300",
    "row_inserted_on":"2018-05-08 07:32:12",
    "last_edited_on":"2018-05-10 06:29:18",
    "id":"1"
},
{
    "sale_item":"Chocolate",
    "sale_qty":"4",
    "row_inserted_on":"2018-05-09 11:31:19",
    "last_edited_on":"2018-05-09 11:31:19",
    "id":"2"
},
{
    "sale_item":"Biscuit",
    "sale_qty":"5",
    "row_inserted_on":"2018-05-10 10:17:10",
    "last_edited_on":"2018-05-10 10:17:10",
    "id":"3"}
]

Проблема в , когда я запускаю php-файл, он не вставляет и не обновляет все данные в файле JSon одновременно. Каждая запись из файла JSon вставляется в базу данных при каждом запуске.

1 Ответ

0 голосов
/ 16 мая 2018

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

<?php

try{
    $connect = mysqli_connect("localhost", "root", "", "mytest");    
    $query = '';
    $table_data = '';
    $filename = "path.json";

    $data = file_get_contents($filename);
    $array = json_decode($data, true); 

    foreach($array as $row) 
    {
      $query .= "INSERT INTO tbl_sales(sale_item, sale_qty, row_inserted_on, last_edited_on, id) VALUES ('".$row["sale_item"]."', '".$row["sale_qty"]."', '".$row["row_inserted_on"]."', '".$row["last_edited_on"]."', '".$row["id"]."') ON DUPLICATE KEY UPDATE sale_item='".$row["sale_item"]."', sale_qty='".$row["sale_qty"]."', row_inserted_on='".$row["row_inserted_on"]."', last_edited_on='".$row["last_edited_on"]."';";
    }

    mysqli_multi_query($connect, $query);  

   echo "<h1>All data appeded </h1>";
} catch(Exception $e){

echo $e->getMessage();    
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...