저는 현재 포트폴리오 프로젝트의 일부로 경매 웹 사이트를 개발 중입니다. 해결할 수없는 흥미로운 문제가 있습니다.MySQL 트랜잭션 - 경매 입찰 INSERT가 대기열에서 처리 되었습니까?
현재 현재 최고 입찰가 (쿼리 1)를 확인하고 현재 저장된 입찰가보다 입찰가가 높으면 데이터베이스 (쿼리 2)에 새 입찰가를 삽입합니다. 상당히 기본적인 논리이며, 입찰가가 더 낮 으면 사용자에게 결국 통지됩니다.
Query 1:
$result = mysql_query("SELECT * FROM bids WHERE item_id = '".$_POST['id']."' ORDER BY bids.amount DESC LIMIT 1");
Query 2:
$query = sprintf("INSERT INTO bids(item_id,buyer_id,amount,created) VALUES('%s','%s','%s',NOW())",
mysql_real_escape_string($item_id),
mysql_real_escape_string($user_id),
mysql_real_escape_string($amount));
참고 : 나는 어디를 확인하는 틈 사이에 상황이있을 것이다 그러나 나는 불확실입니다
... 거기에 주요 보안 문제는이 코드를하지만 이것은 단지 예입니다 알고 가격을 책정하고 데이터베이스에 삽입하면 다른 쿼리가 실제로 더 빨라지고 데이터베이스에 삽입 된 다음 현재 입찰 논리가 망가질 수 있습니다.
mysqli 또는 PDO 드라이버와의 트랜잭션을 사용하여 입찰가가 정확하게 대기열에 들어가게 할 수 있습니까?
MySQL은 이러한 일이 발생하지 않도록 mysql 쿼리를 대기열에 넣는 방법을 제공합니까?
를 업데이트하지만 난 정말이 유지 할 필요가 없습니다. 행을 잠그면 확실히 문제를 해결할 수 있습니다. –