2010-02-05 4 views
0

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

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

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

ответ

2

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

+0

Спасибо, не могли бы вы сказать мне, работает ли «или умирает» в онлайн-файлах cgi, поскольку я никогда не могу заставить его выводить его в браузер. –

+0

fetch() без execute() .. поэтому im guessing ... 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). "'") Или умереть «Не удалось выбрать из таблицы»; $ sth-> execute(); if ($ sth-> rows! = 0) { my $ ref = $ sth-> fetchrow_hashref(); $ ref-> execute(); print $ DBI :: errstr; my $ domain = $ ref -> {website}; my $ DB_username = $ ref -> {db_name}; my $ DB_password = $ ref -> {db_pass}; $ sth-> finish(); $ dbh-> disconnect(); shuld сделайте это –

+0

, если вы используете cgi, один метод - использовать CGI :: Carp. см. http://perldoc.perl.org/CGI/Carp.html#MAKING-PERL-ERRORS-APPEAR-IN-THE-BROWSER-WINDOW. Кстати, разместите свой код в своем вопросе, а не в комментариях, потому что форматирование плохое. – ghostdog74

0

То, что я часто, когда я не могу видеть, что происходит:

использование данных :: Dumper;

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

print Dumper $ ref;

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

Смежные вопросы