Как я могу применить функцию MySQL транзакций, используя с ней php? - PullRequest
1 голос
/ 26 мая 2020

Я пытаюсь создать страницу счета-фактуры, которая принимает в качестве входных данных несколько продуктов, а также некоторую информацию о клиенте. Он взаимодействует с четырьмя MySQL таблицами (sales, sale_details, posting и product_inventory). Вы получите представление о том, что произойдет, если запрос не удастся. Я хочу этого избежать. Для этой цели я пытаюсь реализовать функцию транзакций движка базы данных InnoDB, используя PHP и MySQL (PHPMyAdmin). Еще одна проблема. Я слышал, что autocommit отключен по умолчанию, мне нужно включать ON, а затем OFF каждый раз, когда я запускаю запрос? Вот мой фрагмент кода PHP:

  $sal_date = trim($_POST["sale_date"]);
  $cust_id = trim($_POST["cust_id"]);
  $book_no = trim($_POST["sal_book_no"]);
  $rem = $_POST["sal_remarks"];
  $st = trim($_POST["sub_total"]);
  $disc = floatval($_POST["total_disc"]) + floatval($_POST["adj_disc"]);
  $total = trim($_POST["grand_total"]);

  $query1 = mysqli_query($link, "INSERT INTO sales
  (cust_id, book_no, sale_date, sub_total, discount, total, remarks)
  VALUES ('$cust_id', '$book_no', '$sal_date', '$st', '$disc', '$total', '$rem')") or die(mysqli_error($link));

  $query2 = mysqli_query($link, "SELECT LAST_INSERT_ID() as last_row") or die(mysqli_error($link));
  $sal_id = mysqli_fetch_array($query2);
  $sal = intval($sal_id["last_row"]);

  $the_query1 = mysqli_query($link, "INSERT INTO `posting`(`type`, `account_id`, `tr_id`, `tr_date`, `debit`) VALUES ('SI','$cust_id','$sal', '$sal_date', '$total')") or die(mysqli_error($link));
  $the_query2 = mysqli_query($link, "INSERT INTO `posting`(`type`, `account_id`, `tr_id`, `tr_date`, `credit`) VALUES ('SI','10002','$sal', '$sal_date', '$total')") or die(mysqli_error($link));

  for($count=0; $count<$_POST["total_item"]; $count++)
  {
    $prod_id = floatval(trim($_POST["product_name"][$count]));
    $quantity = floatval(trim($_POST["qty"][$count]));
    $disc = floatval(trim($_POST["disc"][$count]));

    $query3 = mysqli_query($link, "INSERT INTO sale_details (sal_id, prod_id, quantity, discount) VALUES ('$sal', '$prod_id', '$quantity', '$disc')") or die(mysqli_error($link));
    $query4 = mysqli_query($link, "INSERT INTO product_inventory (invoice_id, product_id, qty_out, in_date) VALUES ('$sal', '$prod_id', '$quantity', '$sal_date')") or die(mysqli_error($link));
  }

Буду признателен за ваши предложения.

1 Ответ

1 голос
/ 26 мая 2020

Вы можете использовать этот метод

mysqli_query($db, "START TRANSACTION");

$query1 = mysqli_query($db, "Query 1");
$query2 = mysqli_query($db, "Query 2");
$query3 = mysqli_query($db, "Query 3");

if($query1 && $query2 && $query3) {
    mysqli_query($db, "COMMIT");
} else {
    mysqli_query($db, "ROLLBACK");
}
...