2012-01-08 13 views
3

PHP로 이벤트를 설정하고 mysql에 저장하고 있습니다. 나중에 이벤트를 업데이트하려고하지만 어떤 이벤트를 업데이트해야하는지 알기 위해 생성 된 시간을 사용합니다.mysql 행의 식별자 사용

그러나 여러 이벤트가 똑같은 초에서 시작하면 우리는 많은 사용자가있을 경우 문제가 발생할 수 있습니다. 내 솔루션은 시작 시간과 사용자 번호를 확인하는 것으로 충분하다고 생각합니다. 괜찮아? 그것을 할 수있는 더 좋은 방법이 있습니까?

먼저, 이벤트를 만들 때 :

$starttime = time(); 
mysql_query("INSERT INTO events (userid, starttime) 
      VALUES ('$userid', '$starttime')"); 

나중에 이벤트 업데이트 : 이전의 끝에있는 테이블의 자동 증가 필드의 값을 얻을 수

mysql_query("UPDATE events 
      SET newdata='$newdata' 
      WHERE starttime='$starttime' 
      AND userid='$userid'"); 

답변

6

좋지 않은 방법. 당신은 그 값을 검색 할 수 있습니다

ALTER TABLE events ADD id int unsigned primary key auto_increment; 

: 그냥 중복/충돌의 두려움없이 당신에게 당신이 유일하게있는 행을 식별 할 수있는 보장 고유의 비 반복 값을 줄 것이다, 그 테이블에 auto_incrementing 기본 키 ID 필드를 넣어 자동으로 삽입 쿼리 후 :

$sql = "INSERT ..."; 
    $result = mysql_query($sql) or die(mysql_error()); 
    $new_id = mysql_insert_id(); // see here: http://us2.php.net/manual/en/function.mysql-insert-id.php 

    ... other stuff... 

    $sql = "UPDATE ... WHERE id = $new_id;": 
    $result = mysql_query($sql) or die(mysql_error()); 
+0

나는 복사 한 mysql을 복사하지만 내 서버의 버전과 일치하지 않는 구문에 관한 오류가 발생했습니다. '서명되지 않은 int 기본 키 auto_increment'; db db 5.0.45에서, 그리고 mysql 클라이언트 5.0.22 (이 중 하나가 버전이라고 가정하고 있음)가 나와 있습니다. 감사! –

+0

oops는 'int unsigned'여야합니다. 나는 대답을 편집 할 것이다. –

+0

이제는 효과가 있습니다. 추가 된 열. 덕분에 –

관련 문제