Как скрыть системное сообщение об ошибке при добавлении дубликатов данных в MySQL DB с помощью Perl?

0

Я создал таблицу с 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. Ошибка

  • 2
    Пожалуйста, покажите нам код, где вы установили соединение с базой данных. Скорее всего, у вас есть PrintError => 1 там. Удалить это.
  • 1
    Кроме того, вы должны добавить use strict; к вашему коду, чтобы Perl сообщал вам о проблемах в вашем коде. "insert ... values(@StudentID,..." не будет делать то, что вы хотите, потому что либо у вас нет массива @StudentID либо вы делаете очень странный код ... Видя, что у вас есть другие переменные, возможно, вы есть массив @StudentID . Тем не менее, вы должны использовать метки-заполнители DBI metacpan.org/pod/DBI#Placeholders-and-Bind-Values
Теги:
oracle11g

1 ответ

1

Вы можете установить атрибут PrintError => 0 при подключении к базе данных. По умолчанию он включен. Также вы можете попробовать установить этот атрибут в $dbh->prepare. Должен работать для этого оператора дескриптор только в соответствии с документацией https://metacpan.org/pod/DBI#PrintError

  • 2
    Нет, eval ни в коем случае не ловит вещи, напечатанные в STDERR, и не предупреждает.
  • 1
    Требуется хук SIG{__WARN__} для stderr (и это может не всегда работать). Но вопрос для меня заключается в том, почему игнорировать предупреждения / ошибки? Исправьте их, чтобы не было попыток ввести дубликаты данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню