使用php从json字符串/数组插入mysql中的多行?

时间:2017-09-16 11:29:28

标签: php mysql json

“我正在尝试开发一个允许我在mysql数据库中从jsonarray插入多行的脚本,但是在测试时只插入了一行,这是我的代码:

<?php 
    $con = mysqli_connect($host,$user,$password,$database) or die('Unable to Connect');
     if($_SERVER["REQUEST_METHOD"]=="POST")
     {
         $jsonData=file_get_contents("sampledata.json");
         $jsonString=json_decode($jsonData,true);
         foreach($jsonString['Order Summary'] as $cart)
         {
             $name=$cart['ProductName'];
             $price=$cart['ProductPrice'];
             $quantity=$cart['ProductQuantity'];
             $cost=$cart['ProductCost'];
             $seller=$cart['SellerId'];
             $stmt=$con->prepare("INSERT INTO sProducts(Name,Price,Quantity,Cost,Sellerid)VALUES(?,?,?,?,?)");
             $stmt->bind_param("sssss",$name,$price,$quantity,$cost,$seller);
             if($stmt->execute())
              return json_encode("data inserted");
            return json_encode("error");     
         } 
     }
谁能告诉我错误在哪里或能引导我走向这个方向?

1 个答案:

答案 0 :(得分:1)

首先,你在循环的第一次迭代中进行重新调整 - 这意味着脚本停止了。 return只应用于从函数返回。

如果同时删除return,则会使循环继续,直到完成。

并且你不应该在循环中准备查询,它不需要 - 并且在开始循环之前准备它更有效(当你在循环中绑定和执行时,它可以多次使用不同的值)。我还在代码中添加了一些空格以便于阅读

$con = mysqli_connect($host,$user,$password,$database) or die('Unable to Connect');
$msg = "data inserted";

if ($_SERVER["REQUEST_METHOD"]=="POST") {
    $jsonData = file_get_contents("sampledata.json");
    $jsonString = json_decode($jsonData,true);
    $stmt = $con->prepare("INSERT INTO sProducts (Name, Price, Quantity, Cost, Sellerid) VALUES (?, ?, ?, ?, ?)");

    foreach($jsonString['Order Summary'] as $cart) {
        $name = $cart['ProductName'];
        $price = $cart['ProductPrice'];
        $quantity = $cart['ProductQuantity'];
        $cost = $cart['ProductCost'];
        $seller = $cart['SellerId'];
        $stmt->bind_param("sssss", $name, $price, $quantity, $cost, $seller);
        if (!$stmt->execute())
            $msg = "Something went wrong";
    } 
}
return json_encode($msg);