【发布时间】:2019-09-07 19:59:27
【问题描述】:
我制作 PHP API 来插入多行 JSON 对象数据。我的JSON数据格式是这样的:
(我在控制台日志中收到以下格式的 console.log(this.state.cartItems[]). 在 REACT)
0: {SparePartID: "34", qty: 1, Price: "500", OrderID: "14"}
1: {SparePartID: "35", qty: 1, Price: "250", OrderID: "14"}
2: {SparePartID: "36", qty: 1, Price: "430", OrderID: "14"}
我的 PHP Api 代码如下:
---> part_order_details.php
<?php
header("Access-Control-Allow-Origin: http://localhost/Auth/");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Allow-Origin: *");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
include_once '../config/database.php';
include_once '../objects/order.php';
$database = new Database();
$db = $database->getConnection();
$order = new Order($db);
$a = file_get_contents("php://input");
$data = json_decode($a, true);
if($order->orderDetails($data)){
http_response_code(200);
echo json_encode(array(
"message" => "All rows of Order Details are inserted.",
));
}
else{
http_response_code(400);
echo json_encode(array("message" => "Sorry! Error while inserting rows of order details"));
}
?>
和 -----> order.php 是:
<?php
class Order{
private $conn;
public $SparePartID;
public $OrderID;
public $Price;
public $Quantity;
public function __construct($db){
$this->conn = $db;
}
function orderDetails($arr)
{
$query= "INSERT INTO sparepartorderdetails (SparePartID, OrderID, Quantity, Price) VALUES
(:SparePartID, :OrderID, :qty, :Price) ";
$stmt = $this->conn->prepare($query);
foreach($arr as $item)
{
$stmt->bindValue(':SparePartID', $item[0]);
$stmt->bindValue(':qty', $item[1]);
$stmt->bindValue(':Price', $item[2]);
$stmt->bindValue(':OrderID', $item[3]);
if($stmt->execute()){
return true;
}
else{
$arr = $stmt->errorInfo();
print_r($arr);
}
}
}
}
目前,我正在尝试使用 POSTMAN 测试 PHP API。 所以我在 Postman 正文中发送此数据以获取 POST 请求:
{
"0":
{"SparePartID": "34",
"qty": "1",
"Price": "500",
"OrderID": "14"},
"1":
{"SparePartID": "35",
"qty": "1",
"Price": "250",
"OrderID": "14"}
}
但 POSTMAN 显示 ERROR 状态:400 Bad Request 并带有消息: { "message": "抱歉!插入订单详情行时出错" }
我搜索了很多这个问题,但没有解决方案。 我是否遗漏了什么或使用错误的方式插入多个 JSON 行?请帮我!
【问题讨论】:
-
你能显示发布的实际原始数据吗?因为您在顶部显示的内容不是有效的 JSON。
-
@PatrickQ 我在 POSTMAN 中发布的原始数据是我问题最后的数据。 {“0”:{“SparePartID”:“34”,“数量”:“1”,“价格”:“500”,“订单ID”:“14”},“1”:{“SparePartID”:“35 ", "数量": "1", "价格": "250", "OrderID": "14"} }
-
好的,所以第一件事,如果你想在一个请求中插入多条记录,不要在你的循环中
return。也许跟踪哪些记录插入成功,哪些没有插入,然后在最后报告结果。就您的执行看似返回错误而言,请查看 PDO error handling 以帮助您找出确切的问题。 -
插入时需要从db类中得到一个更无用的错误。
-
@RaymondNijland 也许你的意思是一个更有用的错误:)