Я пытаюсь протестировать свой код и знаю, что когда я введу значения для внешних ключей, которых нет в исходной таблице, я получу ограничение целостности внешнего ключа. Мой вопрос: как я могу справиться с этим в PHP PDO, чтобы он выдавал сообщение об ошибке клиенту, не используя try catch? Я звоню (eqt_id) из таблицы оборудования и (Patient_id) для таблицы пациентов.
Это ошибка:
Неустранимая ошибка: Uncaught PDOException: SQLSTATE [23000]: Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (smartmed
,eqtvisit
, ОГРАНИЧЕНИЕ eqtvisit_ibfk_2
ИНОСТРАННЫЙ КЛЮЧ (eqt_id
) РЕКОМЕНДАЦИИ equipment
(eqt_id
) НА УДАЛЕННОМ КАСКАДЕ) в C: \ xampp \ htdocs \ smartmed \ eqtaddvst.php: 63 Трассировка стека: # 0 C: \ xampp \ htdocs \ smartmed \ eqtaddvst.php (63): PDOStatement-> execute () # 1 { main} в C: \ xampp \ htdocs \ smartmed \ eqtaddvst.php в строке 63
Это мой код:
$error = false;
if(isset($_POST['eqtAddVst'])){
//Retrieve the field values from our registration form.
$eqtid = !empty($_POST['eqt_id']) ? trim($_POST['eqt_id']) :
$error=true;
$patientid = !empty($_POST['patient_id']) ? trim($_POST['patient_id'])
: $error=true;
$eqtvisittype = !empty($_POST['eqtvisit_type']) ?
trim($_POST['eqtvisit_type']) : $error=true;
$eqtvisitindate = !empty($_POST['eqtvisit_indate']) ?
trim($_POST['eqtvisit_indate']) : $error=true;
$eqtvisitintime = !empty($_POST['eqtvisit_intime']) ?
trim($_POST['eqtvisit_intime']) : $error=true;
$eqtvisitoutdate = !empty($_POST['eqtvisit_outdate']) ?
trim($_POST['eqtvisit_outdate']) : $error=true;
$eqtvisitouttime = !empty($_POST['eqtvisit_outtime']) ?
trim($_POST['eqtvisit_outtime']) : $error=true;
//the prepared statement is built and executed.
if($error){
echo '<script language="javascript">';
echo 'alert("Must Enter All Records")';
echo '</script>';
}
//Prepare our INSERT statement.
$sql = "INSERT INTO eqtvisit (eqtvisit_type, patient_id, eqt_id, eqtvisit_indate, eqtvisit_intime, eqtvisit_outdate, eqtvisit_outtime)
VALUES (:eqtvisit_type, :patient_id, :eqt_id, :eqtvisit_indate, :eqtvisit_intime, :eqtvisit_outdate, :eqtvisit_outtime)";
$stmt = $conn->prepare($sql);
//Bind our variables.
$stmt->bindValue(':eqt_id', $eqtid);
$stmt->bindValue(':patient_id', $patientid);
$stmt->bindValue(':eqtvisit_type', $eqtvisittype);
$stmt->bindValue(':eqtvisit_indate', $eqtvisitindate);
$stmt->bindValue(':eqtvisit_intime', $eqtvisitintime);
$stmt->bindValue(':eqtvisit_outdate', $eqtvisitoutdate);
$stmt->bindValue(':eqtvisit_outtime', $eqtvisitouttime);
//Execute the statement and insert the new account.
$result = $stmt->execute();
//If the signup process is successful.
if($result){
//What you do here is up to you!
echo '<script language="javascript">';
echo 'alert("Succeed")';
echo '</script>';
Задача ещё не решена.
Других решений пока нет …