5

私はRHEL 5.5 64 bitマシンに乗っています。

マシンにActivePerl 5.10 64 ビットをインストールし、以前に組み込まれた Perl 5.8 64 ビットをアップグレードしました。私は MySQL を稼働させており、私の PHP プロジェクトは MySQL にアクセスできます。Perl ファイルは、DBD を使用して同じデータベースにアクセスする必要がありますが、アクセスできません。私はそれを確認しました:

  1. 私のMySQLサービスは稼働中です。
  2. 私のユーザーが存在し、データベースとデータが存在します。
  3. シェル MySQL クライアントを介してデータベースからデータにアクセスできます。

以下は私の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の終わりにあると思います。

4

2 に答える 2

2

通常、データベース接続文字列、パスワード文字列、SQL クエリでは一重引用符を使用します。これは、二重引用符を使用するとエラーが発生する可能性があるためです。二重引用符は補間に使用されるためです。

こう書くといいと思います。

#!/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";
   }
于 2012-03-20T10:05:18.640 に答える
0

これが私の推測です。

mysql から mysql コネクタ lib を正しくインストールしましたか?

ホストを指定しましたか?

これを試してください:

  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 ドライバーをインストールして使用してみてください。

于 2012-03-20T08:20:40.107 に答える