【问题标题】:Php doesn't INSERT or ON DUPLICATE KEY UPDATE at once from JSon to MySQLPhp 不会从 JSON 到 MySQL 一次插入或 ON DUPLICATE KEY UPDATE
【发布时间】:2018-10-26 07:01:31
【问题描述】:

我想将 Json 文件中的新记录插入数据库或用新值更新现有记录。我的 MySQL 表(tbl_sales)如下,其中idprimarykey

+-----------------+-------------+------+-----+---------+-------+
| 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 文件中的每条记录插入到数据库中。

【问题讨论】:

    标签: php json mysqli-multi-query


    【解决方案1】:

    您需要对逻辑进行一些更改,请参阅以下更改:

    <?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();    
    }
    ?>
    

    【讨论】:

    • @Kawaljeet Singh 感谢您的回复。我得到了以下内容:1. 添加了 try catch 块 2. 连接赋值 3. 删除了分号和 VALUES 关键字 4.更改mysqli_multi_connect
    猜你喜欢
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多