Я создал таблицу с 2 составными ключами в MySQL. Я сейчас пытаюсь вставить повторяющиеся значения, и поэтому я получаю сообщение об ошибке, сгенерированное системой. Я хочу скрыть это сообщение об ошибке и отобразить свое собственное сообщение об ошибке - как я могу это сделать? Я попытался использовать "warn", но сгенерированное системой сообщение все еще отображается.
$sts = $dbh->prepare("insert into Enrolled(Student_Id,CourseID,DOJ) values(@StudentID,$CourseID,CURDATE())");
$sts->execute() or warn ("Error");
выход:
DBD :: mysql :: st выполнить не удалось: Дублирующая запись '16 -11 'для ключа' PRIMARY 'в Stud ent.pm строка 182, строка 10. Ошибка
Вы можете установить атрибут PrintError => 0
при подключении к базе данных. По умолчанию он включен. Также вы можете попробовать установить этот атрибут в $dbh->prepare
. Должен работать для этого оператора дескриптор только в соответствии с документацией https://metacpan.org/pod/DBI#PrintError
SIG{__WARN__}
для stderr (и это может не всегда работать). Но вопрос для меня заключается в том, почему игнорировать предупреждения / ошибки? Исправьте их, чтобы не было попыток ввести дубликаты данных.
PrintError => 1
там. Удалить это.use strict;
к вашему коду, чтобы Perl сообщал вам о проблемах в вашем коде."insert ... values(@StudentID,..."
не будет делать то, что вы хотите, потому что либо у вас нет массива@StudentID
либо вы делаете очень странный код ... Видя, что у вас есть другие переменные, возможно, вы есть массив@StudentID
. Тем не менее, вы должны использовать метки-заполнители DBI metacpan.org/pod/DBI#Placeholders-and-Bind-Values