Я хочу инициализировать таблицу 'ticket' с некоторыми идентификаторами билетов. Для этого я хочу вставить 120 идентификаторов билетов в таблицу. Однако при каждом 10-м утверждении MySQL сообщает мне, что идентификатор уже существует, и поэтому не позволяет мне его вставить. Вот мой код:
//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();
?>
Вот функции, используемые в коде:
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;
}
Вот журнал, который возвращается в браузер:
TCKT00000000YDLДобавлено в таблицу заявок!
TCKT10000000YDLДобавлено в таблицу заявок!
TCKT20000000YDLДобавлено в таблицу заявок!
TCKT30000000YDLДобавлено в таблицу заявок!
TCKT40000000YDLДобавлено в таблицу заявок!
TCKT50000000YDLДобавлено в таблицу заявок!
TCKT60000000YDLДобавлено в таблицу заявок!
TCKT70000000YDLДобавлено в таблицу заявок!
TCKT80000000YDLДобавлено в таблицу заявок!
TCKT90000000YDLДобавлено в таблицу заявок!
TCKT10000000YDLOu уже существует, поэтому не добавляйте его!
TCKT11000000YDLДобавлено в таблицу заявок!
TCKT12000000YDLДобавлено в таблицу заявок!
TCKT13000000YDLДобавлено в таблицу заявок!
TCKT14000000YDLДобавлено в таблицу заявок!
TCKT15000000YDLДобавлено в таблицу заявок!
TCKT16000000YDLДобавлено в таблицу заявок!
TCKT17000000YDLДобавлено в таблицу заявок!
TCKT18000000YDLДобавлено в таблицу заявок!
TCKT19000000YDLДобавлено в таблицу заявок!
TCKT20000000YDLOu уже существует, поэтому не добавляйте его!