2011-12-09 1 views
0

나는 일하고있는 프로젝트를 위해 단순한 매매 웹 사이트를 구축하려고 노력하고있다.사용자가 mysql 문에서 올바른 정보를 얻을 수 있도록 하시겠습니까?

사용자는 말하자면 손이나 가상 은행에 돈을 가질 수 있습니다.

if ($_POST['deposit'] > 0 && $_POST['deposit'] <= $user['money']) { 
    $dbc -> beginTransaction(); 
    $dbc -> query("SELECT id FROM items WHERE id = " . $user['id'] . " FOR UPDATE LIMIT 1"); 
    $q = $dbc -> prepare("UPDATE items SET money = money-?, bank = bank+?"); 
    $q -> execute(array($_POST['deposit'], $_POST['deposit'])); 
    $dbc -> commit(); 
} 

다른 계정은 사용자의 정보를 볼 수 있습니다 같은 돈을 자신의 양이 : 사용자가 if 문은 PHP에 싸여 자신의 계정에 자신의 손에서 돈을 입금 할 때 나는이 트랜잭션을 사용하고 있습니다. 계정에 돈을 입금하는 것처럼 계정에서 사용자의 데이터를 보는 경우 위 쿼리를 통해 mySQL에서 올바른 일관성있는 데이터를 얻을 수 있습니까?

나는 계정의 모든 정보를; 계정 그가 돈을 입금되는 것처럼 사용자의 데이터에 액세스하는 경우, MySQL의 쿼리는 새로운 갱신 된 행에 대한

$dbc -> query("SELECT * FROM items WHERE id = " . $account['id'] . "); 

대기? 내 모든 쿼리가 내 프로젝트에서 일관성을 유지하는지 확인하고 싶습니다.

또한 SELECT FOR UPDATE 쿼리에 LIMIT 1을 사용해도 괜찮습니까?

답변

0

트랜잭션 무결성을 위해 InnoDB를 사용하면 원하는 것을 얻을 수 있습니다.

까지 LIMIT 1까지 테이블을 디자인하는 것이 좋습니다. 따라서 기본 키를 사용하여 선택하기 위해 둘 이상의 행을 업데이트하도록 선택할 수 없습니다.

관련 문제