Forum Webscript.Ru

Программирование => Perl => Тема начата: Alexandr от 24 Октября 2002, 09:08:13

Название: Подавление ошибки
Отправлено: Alexandr от 24 Октября 2002, 09:08:13
Как в Perl\'е подавить MySQL\'евскую ошибку

Есть напр. след. строка:
.....
$rows=$dbh->do("INSERT INTO my_table VALUES(\'".$some_str."\')");
.....

Поле в таблице my_table уникально (UNIQUE)
Далее я проверяю:

if (defined($rows)) .....
else ....

Т.е. если не смог добавить, то $rows будет !defined

Всё бы хорошо, но если строку добавить не смог, то в error.log\'е такая запись вылезает

[error] [client 199.106.212.8] FastCGI: server "/autodealer/www/includes/button.fcgi" stderr: DBD::mysql::db do failed: Duplicate entry \'194.85.218.250,\' for key 1 at button.fcgi line 68.

А мне эта строчка на хрен не нужна.

Может подскажете как от неё избавится.
Название: Подавление ошибки
Отправлено: NeoNox от 24 Октября 2002, 12:24:01
Cдается мне, что MySQL тут нипричем...
В MySQL есть два параметра PrintError и RaiseError. Поиграйся с ними (хотя я сомневаюсь, что поможет).

Пример:
$dbh = DBI->connect("DBI:mysql:database=database_name;host=localhost","username", "userpass",{PrintError => 0, RaiseError => 1});

ЗЫ. Я не очень хорошо понял проблему, но думаю, что без "подавления" можно обойтись. Опиши подробнее.
Название: Подавление ошибки
Отправлено: Alexandr от 24 Октября 2002, 13:23:34
Цитировать
Здается мне, что MySQL тут нипричем

Понятно, что не причём.

Цитировать
Пример:
$dbh = DBI->connect("DBI:mysql:database=database_name;host=localhost","username", "userpass",{PrintError => 0, RaiseError => 1});

Ща поюзаю, тока вроде на RaiseError у мя Perl ругался.

Цитировать
ЗЫ. Я не очень хорошо понял проблему, но думаю, что без "подавления" можно обойтись. Опиши подробнее.


Есть скрипт http://www.autodealer.ru/includes/button.php
зто кнопка-счётчик рейтинга http://www.autodealer.ru/top/

Дак вот следующая ситуация: Юзерза обращаются к скрипту, а я выбираю: SELECT ip ......
Если нет такого ip, то делаю вышеуказаный INSERT, а дабы всё это быстро работало приходится делать следующее:
ip UNIQUE и таблицу LOCK\'ом не закрывать, а просто проверять прощёл ли INSERT.
Все работает ОК, просто хотелось бы в лог не писАть.

PS Ща буду юзать, то что ты подсказал.