dofi
30
2021-04-13 08:40:40
2
96

php 동기화


함수들을 담아놓은 function.php가 있고 특정 함수를 쓰는 a.php가 있습니다

a.php는 주문과 관련된 함수인데 정확히 같은시간,분,초에 주문버튼을 누르면

주문번호를 생성하는 함수를 동시에 불러와서 주문번호가 동일해지는 문제가 발생합니다

ex) 현재 주문번호 = 0001

A와 B가 주문, 둘다 select로 0001을 가져와서 0002의 주문번호를 생성하고 이를 db에 넣어 같은 주문번호가 됨

semaphore, mutex, transaction을 통해 동기화한다고 알고잇는데 이런경우에도 적용이 가능한지

가능하면 어떤식으로 해야되는 알려주시면 감사하겠습니다

function.php
<?
function getCode($DB, $type) {
  $sql = "SELECT 
  IF(Code IS NULL or Code = '', 0, Code) as Code
  FROM Contract 
  WHERE Type = $type AND (Created > curdate())
  ORDER BY PKey DESC
  LIMIT 1;";
  .
  .
  .
} 
Order.php
<?
  $code = getCode($DB,$type)
  .
  .
  .
  // INSERT ... 

?>  
0
  • 답변 2

  • 캐티
    2k
    2021-04-13 08:51:19

    트랜잭션하지 않아서 그렇스빈다.

    설명하기 어려운데 그냥 상호작용 이유 때문이라고 암기하시면 좋겠스빈다 ...

    트랜젝션은 SQL 에서 BEGIN TRANSACTION 으로 시작하는걸 볼 수 있었을꺼빈다. 이건 참고드리면 PHP 의 기능이 아닙니다.

    TRANSACTION-COMMIT 또는 ROLLBACK 해줘야하빈다.

    SQL 은 비슷하므로 이거 보면 될쩌여.

    https://docs.microsoft.com/ko-kr/sql/t-sql/language-elements/begin-transaction-transact-sql

    여차하면 프로시저를 만들어서 하는 편이 좋겠스빈다.

  • dofi
    30
    2021-04-13 15:02:38
    트랜잭션처리가 필요하군요 답변 감사합니다!
  • 로그인을 하시면 답변을 등록할 수 있습니다.