Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > проблемы с работой MySQL на Denwer


Автор: PerlWebMaster 5.10.2011, 06:22
А вот такой  код по синтаксису вроде все правильно

код модуля LogConnect.pm
Код


package LogConnect;
use DBI;
use strict;
sub connect {
    my ($log_dbname, $log_dbhost);
    my $log_dsn = "DBI:mysql:database=$log_dbname;host=$log_dbhost";
    my $log_dbh = DBI->connect($log_dsn, "root", "");
if (!defined($log_dbh)) {
  print "\nerror: Проблемка с подключением к
          базе данных MySql:\n";
          print DBI ->errstr;
          print "-" x 25 . "\n";
          return;
  }
  return $log_dbh;
  }
  1;



код скрипта этого модуля он должен заносить в базу значения 
Код

#!/usr/bin/perl -w
# vislog.cgi
use strict;
use POSIX;
use Socket;
use LogConnect;
my $dbh = LogConnect->connect;
my $ip = $ENV{'REMOTE_ADDR'};
my $browser = $ENV{'HTTP_USER_AGENT'};
my $referer = $ENV{'HTTP_REFERER'};
my $here = $ENV{'REQUEST_URI'};
my @digits = split(/\./, $ip);
my $address = pack("C4", @digits);
my $host = gethostaddr($address, AF_INET);
my $time = strtime("%Y-%m-%d %H:%M:%S",gmtime);
my $query = qq(insert info access_log values
              ('$ip', '$host', '$browser', '$referer',
              '$here', '$time'));
my $sth = $dbh ->prepare($query);
$sth -> execute;
$dbh -> disconnect;


но у меня вот такая  ошибка 
создал базу visitors в MySQL 
ОШИБКИ
Цитата

Use of uninitialized value $log_dbname in concatenation (.) or string at LogConnect.pm line 6.
Use of uninitialized value $log_dbhost in concatenation (.) or string at LogConnect.pm line 6.
DBI connect('database=;host=','root',...) failed: Access denied for user 'root'@'localhost' (using password: YES) at LogConnect.pm line 7
Use of uninitialized value $log_dbhost in concatenation (.) or string at C:\WebServers\home\site.ru\cgi-bin\vislog.cgi line 12.
Use of uninitialized value $log_dbhost in concatenation (.) or string at C:\WebServers\home\site.ru\cgi-bin\vislog.cgi line 14.

Автор: alezzz 5.10.2011, 09:44
$log_dbname, $log_dbhost пустые.

Автор: infarch 5.10.2011, 11:30
А пароль точно пустой?

Автор: PerlWebMaster 5.10.2011, 19:54
Цитата(alezzz @ 5.10.2011,  09:44)
$log_dbname, $log_dbhost пустые.

блин код из книги а как их правильно инициализировать если подключения происходит на Denwer 
пробовал так  не получается
Цитата

package LogConnect;
use DBI;
use strict;
sub connect {
    my $log_dbname = 'visitors';  
    my $log_dbhost = '127.0.0.1';
    my $log_dsn = "DBI:mysql:database=$log_dbname;host=$log_dbhost";
    my $log_dbh = DBI->connect($log_dsn, "root", "1234");
if (!defined($log_dbh)) {
  print "\nerror: Проблемка с подключением к
          базе данных MySql:\n";
          print DBI ->errstr;
          print "-" x 25 . "\n";
          return;
  }
  return $log_dbh;
  }
  1;


Цитата

DBI connect('database=visitors;host=127.0.0.1','root',...) failed: Access denied for user 'root'@'localhost' (using password: YES) at LogConnect.pm line 8
Use of uninitialized value $ip in split at C:\WebServers\home\site.ru\cgi-bin\vislog.cgi line 12.
Undefined subroutine &main::gethostaddr called at C:\WebServers\home\site.ru\cgi-bin\vislog.cgi line 14.

error: ��������� � ������������ �
          ���� ������ MySql:
Access denied for user 'root'@'localhost' (using password: YES)-------------------------

Добавлено @ 19:55
Цитата(infarch @ 5.10.2011,  11:30)
А пароль точно пустой?

пробовал и с пароль создавать и без пароля тоже самое

Автор: infarch 6.10.2011, 12:11
Вот функция котороя я пользуюсь. Работает везде, главное правильно передать данные:

Код


sub get_dbh_mysql {
    my ($database, $user, $pass, $host) = @_;
    $host = $host || 'localhost';
    my $dbh = DBI->connect("dbi:mysql:$database:host=$host", $user, $pass) or 
        throw ISoft::Exception::DB(message=>"Connection Error: $DBI::errstr\n");
    $dbh->{'mysql_enable_utf8'} = 1;
    $dbh->do("set names utf8");
    $dbh->{AutoCommit} = 0;
    return $dbh;
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)