Как можно обрабатывать ограничения целостности внешнего ключа в PHP - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь проверить свой код и знаю, что когда я введу значения для внешних ключей, которых нет в исходной таблице, я получу ограничение целостности внешнего ключа.Мой вопрос заключается в том, как я могу обработать это в PHP PDO, чтобы он выдал сообщение об ошибке клиенту без использования try catch?Я звоню (eqt_id) из таблицы Equipment и (Patient_id) для таблицы Patients.

Это ошибка:

Неустранимая ошибка: Uncaught PDOException: SQLSTATE [23000]: нарушение ограничения целостности:1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (smartmed. eqtvisit, CONSTRAINT eqtvisit_ibfk_2 FOREIGN KEY (eqt_id) ССЫЛКИ equipment (eqt_id) ON DELETE CASCADE) в 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>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...