#perl #dbi
#perl #dbi
Вопрос:
Я новичок в perl, и мне нужно подключить базу данных с помощью DBI. Мой код выглядит следующим образом:
use LWP::Simple;
use XML::Simple qw(:strict);
use Data::Dumper;
use DBI;
use Getopt::Long;
use IO::Uncompress::Gunzip qw(gunzip $GunzipError);
use IO::File;
use warnings;
$dbh = DBI->connect("dbi:);
if (!$dbh) {
amp;logMsg(0, "$DBI::errstr");
die;
} else {amp;logMsg(0,"Connection to $dbName DB OK")}
Я уже установил значения. Что-то вроде сбоя соединения, но я не получил никаких ошибок. Я также проверяю файл журнала, там ничего не отображается. Что я могу сделать для проверки ошибок? Спасибо за любые комментарии и помощь.
Комментарии:
1. Включите трассировку . Кроме того, включите
RaiseError
, чтобы вам не приходилось вручную проверять наличие ошибок после каждого вызова. И всегдаuse strict;
!2. Привет @ThisSuitIsBlackNot, я использовал strict для проверки, ошибка по-прежнему не отображается.
Ответ №1:
Я не могу найти ничего неправильного в вашем коде, если logMsg
только он просто не работает, но это утомительный способ использовать DBI.
Вместо того, чтобы проверять, не пошло ли что-то не так с DBI, гораздо лучше настроить DBI на выдачу ошибки. Вы можете сделать это с помощью RaiseError.
my $dbh = DBI->connect(
"dbi:ODBC:DSN=$dbName;Server=$dbHost",
$dbUser, $dbPassword,
{ RaiseError => 1 }
);
Теперь, если DBI имеет сбой, включая попытку подключения, он выдаст ошибку и остановит программу. Это позволяет избежать необходимости проверять наличие ошибки при каждом использовании базы данных (вы забудете).
Комментарии:
1. Привет, я запускаю этот код в Linux, и я попробовал ваш код и добавил RaiseError. Ничего не меняется и не отображается.
2. @Kyan Может быть,
logMsg
не работает? Попробуйте ввести намеренно неправильный пароль, чтобы вызвать ошибку. Также убедитесь, что вы используете тот код, который, по вашему мнению, используете.3. Я думаю, logMsg работает, потому что я использую его в другом месте, и он выдает ошибку и сообщение.
4. @Kyan Ты используешь его с 0? Правильно ли установлен уровень журнала? Зачем предполагать? Попробуйте выполнить печать или что-то еще. Или попробуйте поместить что-нибудь в базу данных.
5. да, я пытаюсь поместить что-то в базу данных, но сначала мне нужно подключиться к базе данных. Я написал и распечатал слово перед кодом $ dbh, но другое слово, которое я использую для печати после кода $ dbh, не работает.
Ответ №2:
DBI;
$dbh = DBI->connect('Your_Database_Name', 'user_id','Password');
my $sth = $dbh->prepare ("select * from Table_name");
$sth->execute();
my @row_ary = $sth->hetshrow_array;
foreach $item (@row_ary)
{
print "$itemn";
}