【问题标题】:Looping json data then send to database with php循环json数据然后用php发送到数据库
【发布时间】:2017-07-25 08:25:01
【问题描述】:

我有这样的 json 数据:

myjsondata

[

{
"id_user":"31"
},

{
"id_user":"32"
},

{
"id_user":"33"
}

]

然后我用 jquery $.post 发送数据

$.post("myaction.php",
{send: myjsondata }, function(res) {


 }, "json");

然后在 myaction.php 中,我对 json 进行解码,我想使用 foreach 将数据发送到数据库:

myaction.php

$conn = mysqli_connect( "localhost","root","","mydb");

$data = json_decode($_POST['send']);

foreach($data as $row){

    $id_user = $row->id_user;

}

mysqli_query($conn, "INSERT INTO tbl_user 
(id_user) VALUES ('$id_user') ");

当我运行该代码时,数据已经插入到表中,但数据仅使用最后一个 id_user 插入

tbl_user

id_user

33

我希望所有数据都像这样插入到表中

tbl_user

id_user

31
32
33

我该怎么做? 谢谢

【问题讨论】:

  • 将查询移到 foreach 循环内

标签: javascript php jquery json


【解决方案1】:

嗯,这完全符合逻辑。让我们看看你的代码:

$conn = mysqli_connect( "localhost","root","","mydb");

$data = json_decode($_POST['send']);

foreach($data as $row){

    $id_user = $row->id_user;

}

mysqli_query($conn, "INSERT INTO tbl_user 
(id_user) VALUES ('$id_user') "); // Here is the problem!!!!

在您的 foreach 循环中,您会覆盖 $id_user 变量。然后仅在您插入的最后。所以,你可以做什么?只需将插入查询放在 foreach 循环中,它就会起作用。

工作解决方案:

$conn = mysqli_connect( "localhost","root","","mydb");

$data = json_decode($_POST['send']);

foreach($data as $row){

    $id_user = $row->id_user;
    mysqli_query($conn, "INSERT INTO tbl_user 
    (id_user) VALUES ('$id_user') "); 

}

【讨论】:

  • @MuhammadRifqiMauturRahman 很高兴我能提供帮助。愿你也看看bobby-tables.com,了解一下SQL注入。
【解决方案2】:

您需要将查询移到 for 循环中

$conn = mysqli_connect( "localhost","root","","mydb");

$data = json_decode($_POST['send']);

foreach($data as $row){

    $id_user = $row->id_user;

    mysqli_query($conn, "INSERT INTO tbl_user (id_user) VALUES ('$id_user') ");
}

【讨论】:

    【解决方案3】:

    第一个:将您的query 移动到foreach loop 内部

    foreach($data as $row){
    
        $id_user = $row->id_user;
    
        mysqli_query($conn, "INSERT INTO tbl_user (id_user) VALUES ('$id_user') ");
    }
    

    第二个:尝试使用准备好的语句

    原因:您在 foreach 循环中的 overwriting $id_user 和您在 foreach 循环后执行的查询,所以 $id_user 仅包含最后一行值。所以将您的查询移到 foreach loop

    【讨论】:

      【解决方案4】:

      myaction.php文件会是这样的。

      $conn = mysqli_connect( "localhost","root","","mydb");
      
      $data = json_decode($_POST['send']);
      
      foreach($data as $row){
      
          $id_user = $row->id_user;
      
          mysqli_query($conn, "INSERT INTO tbl_user (id_user) VALUES ('$id_user') ");
      }
      

      【讨论】:

        猜你喜欢
        • 2018-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        • 2017-09-18
        • 2021-03-20
        • 1970-01-01
        相关资源
        最近更新 更多