2017-09-16 65 views
-4

「我試圖建立一個腳本,讓我從MySQL數據庫的jsonarray插入多行,但在測試時只有一個行被插入這裏是我的代碼:使用php在json字符串/數組中插入多行mysql?

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

誰能告訴我?哪裏是錯誤的,或者可以引導我進入這個方向

+0

爲什麼不一步一步地調試它? –

+0

'return ...'?你的代碼是否在任何函數中? –

+1

當您返回時,腳本停止。所以,它只會插入第一行。然後,在開始循環之前,您無需爲每次迭代準備查詢 - 準備一次。 – Qirel

回答

1

其一,你reutrning在循環的第一次迭代 - 這意味着腳本停止return應該只被用來從一個函數返回

如果你刪除return s,那會使循環繼續,直到完成。

,你不應該準備環路內的查詢,其並不需要 - 和更有效的啓動循環(也可以用不同的值,當你綁定在一個循環中執行多次使用)前的準備吧。我還在代碼中添加了一些空格,以便於閱讀。

$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);