2010-03-14 4 views
0

일부 티켓 ID가있는 '티켓'테이블을 초기화하려고합니다. 이렇게하기 위해 120 개의 티켓 ID를 테이블에 삽입하려고합니다. 그러나 매 10 번째 문장에서 MySQL은 ID가 이미 존재하므로 삽입 할 수 없다고 알려줍니다.일부 데이터가있는 MySQL 테이블을 채우려는 중이지만 mysqli가 매 10 번째 문을 삽입하지 못하게합니다.

다음
//make a query 
    $insert_ticket_query = "INSERT INTO ticket (id) VALUES (?)"; 
    $insert_ticket_stmt = $mysqli->stmt_init(); 
    $insert_ticket_stmt->prepare($insert_ticket_query); 
    $insert_ticket_stmt->bind_param('s', $ticket_id); 

    $mysqli->autocommit(FALSE); //start transaction 
    for($i=0;$i<NO_GUESTS;$i++){ 
     $id = generate_id($i); 
     $ticket_id = format_id($id, $prefix['ticket'], $suffix['ticket']); 
     $t_id = $ticket_id; 
     //echo '<p>'.$ticket_id.'</p>'; 
     $result = $mysqli->query("SELECT * FROM ticket WHERE id='".$ticket_id."'"); 
     $row_count = $result->num_rows; 
     if($row_count == 0){ 
      $result->close(); 
      if($insert_ticket_stmt->execute()){ 
       $mysqli->commit(); 
       echo "<p>".$t_id."added to the ticket table!</p>"; 
      } 
      else{ 
       $mysqli->rollback(); 
       echo "problem inserting'".$t_id."' to the ticket table"; 
      } 
     } 
     else{ 
      echo "<p>".$t_id."already exists, so not adding it!</p>"; 
      $result->close(); 
     } 
    } 

    $mysqli->autocommit(TRUE); 
    $insert_ticket_stmt->close(); 
    ?> 

코드에 사용되는 기능은 다음과 같습니다 : 여기 내 코드는 티켓 테이블에

TCKT00000000YDLOadded :

 function generate_id($integer){ 
     //generate an ID based on the $string parameter 
     //$id = "000000000000XZLH"; 
     $string = (string) $integer; 
     $length = strlen($string); 
     $id_string = "10000000"; 

     for($i=0;$i<$length;$i++) 
      $id_string[$i] = $string{$i}; 

     return $id_string; 
     } 

     function format_id($id_string, $id_prefix, $id_suffix){ 

      $id = "0000000000000000"; 

      //apply the prefix 
      for($i=0;$i<4;$i++) 
       $id[$i] = $id_prefix{$i}; 

      //apply the id 
      for($i=4,$j=0;$j<8;$i++,$j++) 
       $id[$i] = $id_string{$j}; 

       //apply the suffix 
      for($i=12,$j=0;$j<4;$i++,$j++) 
       $id[$i] = $id_suffix{$j}; 

      return $id; 
     } 

다음은 브라우저에 반환되는 로그입니다!

TCKT10000000YDLO 티켓 표에 추가되었습니다!

티켓 표에 추가 된 TCKT20000000YDLO!

티켓 표에 추가 된 TCKT30000000YDLO!

TCKT40000000YDLO 티켓 표에 추가되었습니다!

티켓 표에 추가 된 TCKT50000000YDLO!

TCKT60000000YDLO 티켓 표에 추가되었습니다!

TCKT70000000YDLO 티켓 표에 추가되었습니다!

TCKT80000000YDLO 티켓 표에 추가되었습니다!

TCKT90000000YDLO 티켓 표에 추가되었습니다!

TCKT10000000YDLO 이미 있으므로 추가하지 마세요.

TCKT11000000YDLO 티켓 표에 추가되었습니다!

TCKT12000000YDLO 티켓 표에 추가되었습니다!

TCKT13000000YDLO 티켓 표에 추가되었습니다!

TCKT14000000YDLO 티켓 표에 추가되었습니다!

TCKT15000000YDLO 티켓 표에 추가되었습니다!

TCKT16000000YDLO 티켓 표에 추가되었습니다!

TCKT17000000YDLO 티켓 표에 추가되었습니다!

TCKT18000000YDLO 티켓 표에 추가되었습니다!

TCKT19000000YDLO 티켓 표에 추가되었습니다!

TCKT20000000YDLO 이미 있으므로 추가하지 마세요!

답변

1

숫자를 왼쪽으로 정렬했기 때문입니다. 보세요. 그것은 정말로 동일합니다. 1은 0으로 오른쪽 너비 10에 채워집니다. 10은 오른쪽 너비 10에 채워집니다.

+0

Ahhhh! 이제 이해가된다! 고마워, 결국 내 솔루션은 해결책이 아니 었어 보인다!. 감사! – Fortisimo

0

generate_id() 및 format_id() 함수를 다시 확인하십시오. 동일 ID를 생성하는 함수가있을 수 있습니다.

1

티켓에 어떤 ID가 필요한지 신경 쓰지 않으면 mysql에서 '자동 증가'필드를 사용해야합니다. 그러면 mysql이 고유 한 ID를 할당합니다.