Прежде всего, вы должны понимать, что выводить сообщения об ошибках прямо сейчас не рекомендуется . Как правило, ваше приложение не раскрывает свою внутреннюю работу, включая сообщения об ошибках.
Следовательно, echo $mysqli->error;
(это правильный синтаксис для операции. Ни кавычки, ни скобки не используются с echo
заявлениями.) недопустимое поведение.
Тем не менее, проверка действительного сообщения об ошибке и создание пользовательского ответа является хорошей практикой. Для этого вы можете catch
исключение. И написать код, чтобы справиться с вашей ситуацией. В вашем случае это будет выглядеть так:
<?php
ini_set('display_errors', 0); // this will prevent PHP from displaying errors
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT ); // has to be moved in connection.php
include("connection.php");
$sql = "insert into parent_child_table(`parent_id`, `child_reg_number`) values(?,?)";
$query = $connection->prepare($sql);
$query->bind_param("is",$parent_id,$reg_number);
$parent_id=$_POST["parent_id"];
$reg_number=$_POST["reg_number"];
try {
$query->execute();
} catch (mysqli_sql_exception $e) {
if ($e->getCode() == /* the code for Foreign Key Violation */ ) {
echo "Wrong Reg # or the Reg # doesn't exist";
} elseif ($e->getCode() == /* the code for Primary key Violation */ ) {
echo "Child Already Registered";
} else {
throw $e; // the most important part - ALL OTHER errors won't go unnoticed
}
}
Итак, в вашем скрипте есть три основных изменения
- Выявление ошибок отключено (должно быть сделано на живом сайте)
- try catch добавлен, чтобы перехватить ошибку
- оператор else добавлен в обработчик ошибок, поэтому вы будете информированы обо всех других ошибках, которые могут возникнуть. Вы можете настроить PHP для регистрации ошибок, чтобы их видеть.