php-使用pdo和json数组的多个插入

5sxhfpxr  于 2021-06-16  发布在  Mysql
关注(0)|答案(1)|浏览(294)

所以我遇到了一个问题,我使用php向mysql数据库插入和更新数据。我从我的应用程序向这个web服务发送一个json数组,然后我需要将这个数据插入一个表并在另一个表上更新它,更新部分工作得很好,但插入部分的工作方式与插入部分的工作方式完全相同,有时只插入数组中的一个对象,有时不添加任何对象。
你们能帮帮我吗?谢谢!!!代码如下:

<?php

include "conexaoPDO.php";

$reserva_dados = $_POST['reserva_dados'];

$array = json_decode($reserva_dados, true);

foreach ($array as $row)
{
    $sql = "INSERT INTO reservas (id_reserva, id_sala, data_inicial, horario_inicial, data_final, horario_final, nome_processo, nome_consultor) VALUES ('".$row["id_reserva"]."', '".$row["id_sala"]."', '".$row["dia"]."', '".$row["horario"]."', '".$row["dia"]."', '".$row["horario"]."', '".$row["nome_processo"]."', '".$row["nome_consultor"]."')";

    $stmt = $PDO->query($sql);
}

foreach ($array as $row)
{
    $sql2 = "UPDATE calendario set status= '".$row["status"]."', id_reserva= '".$row["id_reserva"]."', nome_processo= '".$row["nome_processo"]."', nome_consultor= '".$row["nome_consultor"]."' WHERE id_sala= '".$row["id_sala"]."'  AND dia= '".$row["dia"]."' AND horario= '".$row["horario"]."'";

    $stmt = $PDO->query($sql2);
}

当做,

pcww981p

pcww981p1#

您应该使用这样的准备好的语句来避免sqlinjection。我会尝试重新命名你的变量,以便更具洞察力。您需要检查 $array 为什么插入失败(是否有错误?)您可以使用 try catch 捕捉任何插入错误。
注意,每个foreach结果执行一个查询,这意味着最终,数据越多,插入的速度就越慢。尝试将所有必要的记录构建到一个查询中(每个查询一个foreach来编写 $data 包含值的数组)。

include "conexaoPDO.php";
$reserva_dados = $_POST['reserva_dados'];
$array = json_decode($reserva_dados, true);

foreach ($array as $row)
{
    $data = [
    'id_reserva' => $row["id_reserva"],
    'id_sala' => $row["id_sala"],
    'data_inicial' => $row["dia"],
    'horario_inicial' => $row["horario"],
    'data_final' => $row["dia"],
    'horario_final' => $row["horario"],
    'nome_processo' => $row["nome_processo"],
    'nome_consultor' => $row["nome_consultor"]
    ];
}
$sql = "INSERT INTO reservas (id_reserva, id_sala, data_inicial, horario_inicial, data_final, horario_final, nome_processo, nome_consultor) VALUES (:id_reserva, :id_sala, :data_inicial, :horario_inicial, :data_final, :horario_final, :nome_processo, :nome_consultor)";
$stmt = $pdo->prepare($sql);
$stmt->execute($data);

相关问题