PHP-使用PDO和Json Array进行多次插入

时间:2019-01-04 12:37:06

标签: php mysql pdo

所以我遇到了一个问题,我正在使用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);
}

此致

1 个答案:

答案 0 :(得分:0)

您应使用此类准备好的语句来避免SQLInjection。 我会尝试重命名您的变量,以使其更具感知性。您需要检查$array中有多少个值以及插入失败的原因(是否有任何错误?),您可以使用try catch来捕获任何插入错误。

请注意,每个foreach结果要执行1个查询,这意味着最终,您插入的数据越多,插入速度就越慢。尝试将所有必要的记录构建到1个查询中(1个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);