Подключение к базе данных Perl

#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";
 }