подготовленные операторы для цикла и отката, если есть ошибки - PullRequest
0 голосов
/ 07 ноября 2018

Я надеялся, что кто-нибудь направит меня в правильном направлении. Я пытаюсь сделать следующее:

пользователь загружает CSV-файл, после чего данные сохраняются в многомерном массиве $ formatted_payments. Затем я проверяю записи в файле по сравнению с записями в БД. Мне нужно проверить, совпадает ли маршрут из файла с маршрутом в БД, если он подходит для всех записей, а затем зафиксировать все обновления, но если есть одно несоответствие, мне нужно откатить все обновления. Я надеюсь, что все это имеет смысл. Вот что я сделал, но я еще не проверял.

Спасибо

$conn->autocommit(FALSE);
    $route_errors = [];

    foreach($formatted_payments as $val){

        $sql = "SELECT id, account_no, payment_amount, route_id, payment_date FROM car_payments WHERE payment_date = '".$date."' AND account_no = '".$val['account_no']. "'";
        $res = $conn->query($sql);
        $data = $res->fetch_object();
        if($data){

            if($val['amount'] > 0){

                if($val['route_id'] != $data->route_id){
                    $route_errors[] = $val['account_no'];
                }else{
                    $sql = "UPDATE car_payments SET payment_amount = ? charged = ? WHERE id = ?";
                    $stmt = $conn->prepare($sql);
                    $stmt->bind_param("sss", $val['amount'], 'Si', $data->id);
                    $stmt->execute();
                }

            }else{
                $sql = "UPDATE car_payments SET payment_amount = ? charged = ?, pending = ? WHERE id = ?";
                $stmt = $conn->prepare($sql);
                $stmt->bind_param("ssss", $val['amount'], 'No', 1, $data->id);
                $stmt->execute();
            }

        }


    }

    if(!empty($route_errors)){

        $conn->roll_back();

        echo 'The following accounts do not match the route. Records not imported.<br>';
        foreach($route_errors as $value){
            echo '<li>' . $value . '</li>';
        }

    }else{

        $conn->commit();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...