Интерфейс DBI имеет в своем арсенале мощный и полезный метод trace(), который может пригодиться при отладке неожиданного поведения разработанных сценариев Perl. Этот метод можно использовать для точного отслеживания всех процессов, которые происходят внутри DBD при его работе на различных фазах работы с базой данных. Perl различает девять "уровней" информативности отладочной печати, и первый из них является наименее детализированным.
Листинг 20.27.
#!/usr/bin/perl
# загрузить модуль use DBI();
# соединить
my $dbh = DBI->connect("DBI:mysql:database=somedb;host=localhost", "user", "pass");
# начать отладку $dbh->trace(2);
# выполнить запрос
my $sth = $dbh->prepare("SELECT * FROM mybooks"); $sth->execute();
# просмотр результирующего набора while(my $ref = $sth->fetchrow_hashref())
{
print "Название: $ref->{,title,}nАвтор: $ref->{'author'}nn";
}
# очистить $sth->finish(); $dbh->disconnect();
Вывод трассировки представлен на рис. 20.2.
Внимательное изучение среднего сегмента (рис. 20.2) проясняет причину ошибки в работе сценария: это ошибка в имени таблицы.
Как видно из предыдущего примера, отладочный вывод выводится непосредственно на стандартное устройство вывода. Если этого не нужно делать, можно направить отладочный вывод в файл, задав его имя вторым аргументом метода trace() . Например, следующая строка направит вывод в файл /tmp/error.log.
Точная отладка
Метод trace() может ассоциироваться с дескрипторами, как баз данных, так и операторов. При вызове в качестве метода дескриптора базы данных, метод trace() обеспечивает отладочными сообщениями во время соединения с базой данных. При вызове в качестве метода дескриптора оператора, он трассирует только деятельность, связанную с соответствующим запросом. Эта возможность локализации трассируемых данных по определенному запросу или оператору, позволит получать трассировку по одному из вызовов при наличии в сценарии большого количества вызовов prepare(), execute() и do() .
Отключить отладочную трассировку можно, задав уровень трассировки, равный 0. Листинг 20.29.
$dbh->trace(0);
С точки зрения возможности появления и обработки исключительных ситуаций, интерфейс DBI также позволяет задавать большое количество дополнительных атрибутов (в хеше) как необязательный четвертый аргумент метода connect(). Список значений этого атрибута содержится в табл. 20.5.
Среди них одним из наиболее полезных является атрибут RaiseError, позволяющий запрограммировать следующие действия: при возникновении ошибки во время сеанса
работы с базой данных, Perl активизирует исключительное событие, которое обрабатывается блоком eval(), и немедленно завершить выполнение сценария по команде die(). Этот атрибут вместе в другими перечисленными атрибутами, может использоваться для настройки обработки ошибок как для объектов дескрипторов баз данных, так и объектов дескрипторов операторов.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Трассировка выполнения программы
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Обработка ошибок | Все о MySQL. Вспомогательные функции |