일부 티켓 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 이미 있으므로 추가하지 마세요!
Ahhhh! 이제 이해가된다! 고마워, 결국 내 솔루션은 해결책이 아니 었어 보인다!. 감사! – Fortisimo