您好我正在尝试使用以下perl脚本连接到mysql数据库:
#!/usr/bin/perl -w
use strict;
use DBI;
my $dbh = DBI->connect(
"dbi:mysql:dbname=MYDATABASENAME",
"MYUSERNAME",
"MYPASSWORD",
{ RaiseError => 1 },
) or die $DBI::errstr;
my $sth = $dbh->prepare( "SELECT * FROM classes" );
$sth->execute();
my ($class_id, $class_name, $class_number) = $sth->fetchrow();
print "$class_id $class_name $class_number\n";
my $fields = $sth->{NUM_OF_FIELDS};
print "We have selected $fields field(s)\n";
my $rows = $sth->rows();
print "We have selected $rows row(s)\n";
$sth->finish();
$dbh->disconnect();
现在我只是得到一个空白的屏幕,我无法弄清楚为什么我至少没有收到错误消息。我花了20多个小时试图解决这个问题,这就是为什么我希望有人能看到我做错了什么。提前谢谢。
答案 0 :(得分:2)
在评论中,您添加了原始问题中应该存在的有用信息。
抱歉,我没有从命令行运行它。我把它保存在我的网络托管帐户的cgi-bin文件夹中。运行脚本时,空白屏幕在浏览器中。
由于您没有返回内容类型标题,因此该程序无法作为CGI程序运行。尝试将这两行添加到程序的顶部。
html
您还应该找到Web服务器错误日志所在的位置,并检查是否存在错误。它是一项安全功能,CGI程序不会将错误发送到浏览器(尽管我希望看到一些迹象表明存在问题)。
还值得指出的是use CGI 'header';
print header('text/plain');
编译指示在5.6版本(2000年发布)中被添加到Perl中,并且大多数程序员在shebang行上使用它来代替use warnings
我还建议在编写CGI版本之前,经常(可能总是)将新的Perl模块作为命令行程序进行测试。当你学习新东西时,CGI只会增加额外的,不必要的复杂程度。
答案 1 :(得分:1)
这应该有效。如果您在本地运行脚本,port
是可选的。
use strict;
use warnings;
use DBI;
my $database = 'name_of_database';
my $DBhost = 'localhost';
my $port = 'portnumber';
my $username = 'user123';
my $password = 'password123';
my $dbh = DBI->connect("dbi:mysql:database=$database;host=$DBhost;port=$port",$username,$password,
{ RaiseError => 1,
PrintError => 0,
AutoCommit => 1,
FetchHashKeyName => 'NAME_lc'}, ) or die $DBI::errstr;
my $sth = $dbh->prepare( "SELECT * FROM classes" );
$sth->execute();
my ($class_id, $class_name, $class_number) = $sth->fetchrow();
print "$class_id $class_name $class_number\n";
my $fields = $sth->{NUM_OF_FIELDS};
print "We have selected $fields field(s)\n";
my $rows = $sth->rows();
print "We have selected $rows row(s)\n";
$sth->finish();
$dbh->disconnect();