У меня есть таблица с информацией о пациентах и еще одна для их телефонных номеров.Соотношение между ними составляет 1: N (от 1 до многих).Я наложил одно ограничение: я хочу, чтобы у всех пациентов был хотя бы один номер телефона.Итак, я помещаю транзакцию в свой код следующим образом.
// Beggining of transaction
mysqli_query($dbc,'begin');
$sql1 = " INSERT INTO `dental_clinic`.`patient` (`idpatient` ,`surname` ,`name` ,`middle_name` ,`address` , `town`, `birth_date` , `occupation` , `email` ,`p_comments`) VALUES (NULL , '$surname', '$name', '$middle_name', '$address', '$town', '$birth_date', '$occupation', '$email', '$other');
";
$execute_sql1 = mysqli_query($dbc, $sql1);
$last_id = mysqli_insert_id($dbc);
// Put some variables to the insert queries of telephone.
$sql2_1 = " INSERT INTO `dental_clinic`.`telephone`(`patient_idpatient`, `phone`) VALUES ('$last_id', '$phone') ";
$sql2_2 = "INSERT INTO `dental_clinic`.`telephone`(`patient_idpatient`, `phone`) VALUES ('$last_id', '$phone2')";
$sql2_3 = "INSERT INTO `dental_clinic`.`telephone`(`patient_idpatient`, `phone`) VALUES ('$last_id', '$phone3')";
// Checking the first field of telephone
if (!empty($phone)){
$execute_sql2_1 = mysqli_query($dbc, $sql2_1);
} else {
$execute_sql2_1 = false;
}
// Checking the second field of telephone
if (!empty($phone2)){
$execute_sql2_2 = mysqli_query($dbc, $sql2_2);
} else {
$execute_sql2_2 = true;
}
// Checking the third field of telephone
if (!empty($phone3)){
$execute_sql2_3 = mysqli_query($dbc, $sql2_3);
} else {
$execute_sql2_3 = true;
}
// Checking the insert commands to execute toggether
if ($execute_sql1 && $execute_sql2_1){
if ($execute_sql2_1 && $execute_sql2_2){
if ($execute_sql2_1 && $execute_sql2_3){
mysqli_query($dbc, 'commit');
echo 'The patient personal details inserted succesfully!';
echo 'The primary telephone inserted succesfully! ';
header("Location: new_medical_history.php");
} else {
mysqli_query($dbc, 'rollback');
echo 'Error, on 3rd phone! ';
}
} else {
mysqli_query($dbc, 'rollback');
echo 'Error, on 2nd phone! ';
}
} else {
mysqli_query($dbc, 'rollback');
echo 'Error, on patient personal details or on primary telephone! ';
}
// Ending connection
mysqli_close($dbc);
Обе таблицы patient
и telephone
находятся в одной форме.
Когда я успешно добавляю нового пациентазначение автокремента idpatient
увеличивается на два (1,3,5,7 и т. д.). Но когда я закомментирую транзакцию,
// mysqli_query($dbc,'begin);
// mysqli_query($dbc, 'commit');
// mysqli_query($dbc, 'rollback');
, тогда значение автоинкремента становится нормальным на единицу (7,8,9,10, .. и т. Д.).
Не могли бы вы сказать , почему это происходит ?Это что-то не так в моем коде?Я хочу сохранить транзакцию , чтобы никто из пациентов не был добавлен без основного номера телефона.