Почему мой запрос Perl DBI не возвращает никаких результатов в CGI-скрипте?

0

Я использую DBI в первый раз (и не долго начинал Perl [2 недели]), и я не могу получить никаких результатов из базы данных. Вот что у меня есть:

if( defined( $get{findAllPages} ) && defined( $post{ki} ) ){

   my ($database, $hostname, $port, $password, $user );

   $database = "#########";
   $hostname = "localhost";
   $password = "#########";
   $user = "###########";
   my $KI = $post{ki};

   # connect to the database
   my $dsn = "DBI:mysql:database=$database;host=$hostname;";
   my $dbh = DBI->connect($dsn, $user, $password);
   my $sth = $dbh->prepare("SELECT * FROM accounts WHERE KI = '" . $dbh->quote($KI) . "' ") or die "Could not select from table";
   $sth->execute();
   if( $sth->rows != 0 ) {
      my $ref = $sth->fetchrow_hashref();
      my $domain = $ref->{website};
      my $DB_username = $ref->{db_name};
      my $DB_password = $ref->{db_pass};
      $sth->finish();
      $dbh->disconnect();

      print "domian: " . $domain . "<br />\n";

      chomp(my $url = trim($domain));

Пока он проверяет, соответствует ли KI, а затем проверяет количество строк, которое работает. Бит, который я не могу заставить работать, возвращает значения из массива;

my $ref = $sth->fetchrow_hashref();
my $domain = $ref->{website};
my $DB_username = $ref->{db_name};
my $DB_password = $ref->{db_pass};

Если кто-то может сообщить мне, где я ошибаюсь, это будет очень признательно.

Теги:
dbi

2 ответа

2
Лучший ответ

Попробуйте использовать DBI обработку ошибок, чтобы узнать, что не так. См. Программирование Perl DBI, глава 4 (обработка ошибок) или "DBI:: mysql обработки ошибок" на Perlmonks для ссылок.

  • 0
    Спасибо, не могли бы вы сказать мне, работает ли «или умри» в онлайн-файлах cgi, так как я никогда не получу его для вывода в браузер.
  • 0
    fetch () без execute () .. так что я догадываюсь ... my $ dsn = "DBI: mysql: database = $ database; host = $ hostname;"; my $ dbh = DBI-> connect ($ dsn, $ user, $ password); my $ sth = $ dbh-> prepare ("ВЫБЕРИТЕ * ИЗ СЧЕТОВ, ГДЕ KI = '". $ dbh-> quote ($ KI). "'") или умрите "Не удалось выбрать из таблицы"; $ Sth-> Execute (); if ($ sth-> rows! = 0) {my $ ref = $ sth-> fetchrow_hashref (); $ REF-> Execute (); print $ DBI :: errstr; мой $ домен = $ ref -> {веб-сайт}; my $ DB_username = $ ref -> {db_name}; мой $ DB_password = $ ref -> {db_pass}; $ Sth-> отделка (); $ Dbh-> разъединение (); сделай это
Показать ещё 3 комментария
0

Что я часто делаю, когда не вижу, что происходит:

используйте Data:: Dumper;

my $ref = $sth- > fetch();

print Dumper $ref;

и вы увидите структуру структуры данных. Иногда это вопрос неправильного индексирования в массив или хеш.

Ещё вопросы

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