Я использую 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};
Если кто-нибудь может сообщить мне, где я иду не так, было бы очень признательно.
Спасибо, не могли бы вы сказать мне, работает ли «или умирает» в онлайн-файлах cgi, поскольку я никогда не могу заставить его выводить его в браузер. –
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 сделайте это –
, если вы используете cgi, один метод - использовать CGI :: Carp. см. http://perldoc.perl.org/CGI/Carp.html#MAKING-PERL-ERRORS-APPEAR-IN-THE-BROWSER-WINDOW. Кстати, разместите свой код в своем вопросе, а не в комментариях, потому что форматирование плохое. – ghostdog74