Perl DBD не может подключиться к MySQL на 64-битной машине - PullRequest
3 голосов
/ 20 марта 2012

Я на RHEL 5.5 64 bit машине.

Я установил ActivePerl 5.10 64 бит на машине, обновляя предыдущий встроенный 64 бит бит Perl 5.8.У меня запущен и работает MySQL, и мой проект PHP может получить к нему доступ.Мой 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.

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Используйте одинарные кавычки, как правило, в строке подключения к базе данных, строке пароля и 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";
   }
0 голосов
/ 20 марта 2012

Вот мое предположение.

Правильно ли вы установили mysql коннектор lib из 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 для вашего сервера и использовать его.

...