我在RHEL 5.5 64 bit
机器上。
我在机器上安装了ActivePerl 5.10 64位,升级了之前内置的Perl 5.8 64位。我已启动并运行MySQL,我的PHP项目可以访问它。我的Perl文件需要使用DBD访问同一个数据库,但它无法做到这一点。我已经证实:
以下是我的Perl脚本。
#!/usr/bin/perl
use DBI;
$dbh = DBI->connect( "DBI:mysql:go:super218:3306","root","NEWPASSWORD" ) or die "Couldn't connect to database: " . DBI->errstr;
my $sth = $dbh->prepare( "SELECT * FROM phones" )
or die "Can't prepare SQL statement: $DBI::errstr\n";
$sth->execute or die "executing: $stmtA ", $dbh->errstr;
my @row;
while ( @row = $sth->fetchrow_array( ) ) {
print "Row: @row\n";
}
我使用正确的用户名和密码收到以下错误:
DBI connect('go:super218:3306','root',...) failed: (no error string) at testdb.pl line 6
Couldn't connect to database: at testdb.pl line 6.
我使用不正确的用户或密码收到以下错误:
DBI connect('go:super218:3306','root1',...) failed: Access denied for user 'root1'@'localhost' (using password: YES) at testdb.pl line 6
Couldn't connect to database: Access denied for user 'root1'@'localhost' (using password: YES) at testdb.pl line 6.
我该如何解决这个问题?我想问题出在MySQL的末尾。
答案 0 :(得分:2)
通常在数据库连接字符串,密码字符串和SQL查询中使用单引号,因为这些可能会因双引号而出错。因为双引号用于interpolation。
以下是我认为你应该写的方式。
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use DBD::mysql;
my $dbh = DBI->connect( 'DBI:mysql:go;host=super218','root','NEWPASSWORD' ,{ RaiseError => 1 } )or die "Couldn't connect to database";
my $sth = $dbh->prepare( 'SELECT * FROM phones');
$sth->execute;
while ( my @row = $sth->fetchrow_array() ) {
print "Row: @row\n";
}
答案 1 :(得分:0)
这是我的猜测。
您是否正确安装了mysql的mysql连接器?
您是否指定了主持人?
试试这个:
my $db = 'database_name';
my $srv = 'localhost';
my $user = '***************';
my $pass = '***************';
my $port = '3306';
my $dbh = DBI->connect("DBI:mysql:$db:$srv", $user, $pass, {'RaiseError' => 1, 'PrintError' => 1, 'AutoCommit' => 1 }) or die "Connection Failed: $db DB on $srv\n\t$DBI::errstr\n";
如果这不起作用,请尝试为您的服务器安装ODBC驱动程序并使用它。