2017-09-16 11 views
-4

「私は私がmysqlデータベースのjsonarrayから複数の行を挿入することを可能にするスクリプトを開発しようとしていますが、テスト時にのみ1行が挿入され、ここに私のコードですされている。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");  
     } 
    } 

誰も私を伝えることができます?間違いがあるか、この方向に私を導く可能性が1の場合

+0

なぜそれを段階的にデバッグしませんでしたか? –

+0

'return ...'?コードブロックはどの関数の中にありますか? –

+1

戻ったら、スクリプトは停止します。したがって、最初の行だけが挿入されます。その後、ループを開始する前に、各反復のクエリを準備する必要はありません。 – Qirel

答えて

1

ところ、あなたは、ループの最初の繰り返しでreutrningされている - 。スクリプトが停止したことを意味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); 
関連する問題