ОБНОВЛЕНИЕ 1:
Теперь у меня есть следующий код:
} catch( PDOException $e ) {
error_log( $e -> getMessage() );
switch( $e -> getCode() ) {
case 1452:
echo "Sorry, the referral ID you have entered does not exist.";
break;
default:
echo $e -> getMessage();
}
}
Но он продолжает выдавать мне следующую ошибку:
SQLSTATE [23000]: ограничение целостности
нарушение: 1452 Не удается добавить или обновить
дочерняя строка: ограничение внешнего ключа
не удается (database1.table2, CONSTRAINT
fk_referals_users1 FOREIGN KEY
(users_id) ССЫЛКИ на пользователей (id) ON
УДАЛИТЬ НЕТ ДЕЙСТВИЙ, ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ)
Если это не дает мне
Извините, у вас есть реферальный ID
введено не существует.
по умолчанию: показывает полную ошибку 1452. Так как это ошибка 1452, не должна ли она идти в дело 1452?
ОРИГИНАЛЬНЫЙ ВОПРОС:
У меня есть следующий скрипт, который настроен для целей разработки. Когда это произойдет, я бы хотел отобразить более подходящие сообщения об ошибках.
SQLSTATE [23000]: ограничение целостности
нарушение: 1452 Не удается добавить или обновить
дочерняя строка: ограничение внешнего ключа
не удается (database1
. table2
,
ОГРАНИЧЕНИЕ fk_referals_users1
КЛЮЧЕВОЙ КЛЮЧ (users_id
)
users
(id
) ВКЛ УДАЛИТЬ НЕТ ДЕЙСТВИЙ ВКЛ
ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ)
Это происходит, если введенное ими значение реферала не существует в таблице1, поэтому его нельзя вставить в таблицу2 из-за ограничений.
Это скрипт, который у меня сейчас есть. Как мне перехватить определенные сообщения, такие как приведенные выше и более, и отобразить их примерно так:
Извините, у вас есть реферальный ID
введено не существует.
Это раздел, который я пытаюсь редактировать с точки зрения понятных сообщений об ошибках:
try {
$DBH = new PDO( "mysql:host=localhost;dbname=database1", "user", "pass" );
$DBH -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$STH = $DBH -> prepare( "insert into database1.table1 (display_name, email, password) values ( :display_name, :email, :password )" );
$STH -> bindParam( ':display_name', $_POST['display_name'], PDO::PARAM_STR, 100 );
$STH -> bindParam( ':email', $_POST['email'], PDO::PARAM_STR, 100 );
$STH -> bindParam( ':password', $_POST['password'], PDO::PARAM_STR, 100 );
$STH -> execute();
try {
$STH = $DBH -> prepare( "insert into database1.table ( username, status, users_id ) values ( :username, :status, :users_id )" );
$strStatus = 1;
$STH -> bindParam( ':username', $_POST['display_name'], PDO::PARAM_STR, 100 );
$STH -> bindParam( ':status', $strStatus, PDO::PARAM_INT, 1 );
$STH -> bindParam( ':users_id', $_POST['referer'], PDO::PARAM_INT, 1 );
$STH -> execute();
}
$DBH = null;
header( "Location: ".$_SERVER['PHP_SELF'] );
exit;
} catch( PDOException $e ) {
echo $e -> getMessage();
}