OVH Cloud OVH Cloud

[debutant] Connexion MySQL avec DBI

5 réponses
Avatar
Xetal
Bonjour,
je cherche à me connecter à une bdd mysql avec dbi.

J'ai réduit l'exemple à sa plus simple expression mais nada:

use DBI;
$dbh = DBI -> connect("dbi:mysql:memoria") or die "Impossible de se
connecter à la base de données : $DBI::errstr\n";

La réponse est :
>perl -w test_crea_mysql.pl
Name "main::dbh" used only once: possible typo at test_crea_mysql.pl line 7.
DBI connect('memoria','',...) failed: Can't connect to MySQL server on
'localhost' (10061) at test_crea_mysql.pl line 7
Impossible de se connecter à la base de données : Can't connect to MySQL
server on 'localhost' (10061)
>Exit code: 255

Je suis sous windows XP SP2, mysql (MySQL v4.1.7) est installé avec tous les
para par défaut, la bdd 'memoria' est créée et comporte deux tables (MySQL
Query Broswer 1.1.1g), une connection et 3 utilisateurs sont disponibles
(MySQL Administrator 1.0.14) en dernières versions, mon firewall est
désactivé durant le test (résultat idem si actif).
DBI 1.45 est installé sur activeperl 5.8.4 810 avec le DBD-mysql 2.9003,
dernières versions trouvées avec ppm.

Débutant :( en perl et mysql, je ne sais pas où tourver l'erreur.

Merci pour toute aide :)

5 réponses

Avatar
Denis -esp2008-
Bonjour,

$dbh = DBI -> connect("dbi:mysql:memoria")


A première vue, je me dis "bizarre, il manque un nom d'utilisateur et un
mot de passe".

Dans le source du pilote mysql ([1]), on trouve ceci:


# Avoid warnings for undefined values
$username ||= '';
$password ||= '';


Donc la connexion ne fonctionnera pas s'il n'y a pas un nom d'utilisateur
vide sans mot de passe (pas sûr que ça puisse exister en mysql).

Ou il faut préciser le nom d'utilisateur et le mot de passe, comme
indiqué dans la doc [2].

Pour aller plus loin :

[1] Source de DBD::mysql
http://search.cpan.org/src/RUDY/DBD-mysql-2.9004/lib/DBD/mysql.pm

[2] Doc de DBD::mysql
http://search.cpan.org/~rudy/DBD-mysql-2.9004/lib/DBD/mysql.pm#Class_Methods



Bonne chance,

--
Denis

Avatar
Stéphane Lepolozec
Bonjour,

"Denis -esp2008-" a écrit dans le
message de news:

Ou il faut préciser le nom d'utilisateur et le mot de passe, comme
indiqué dans la doc [2].



Je suis bien d'accord mais même avec un utilisateur et un mpd je n'y arrive
pas.
ce que j'ai compris :
1. pour te connecter il faut une connexion -> créée avec query browser :
connection = test, username = azerty et password = qwerty, hostname =
localhost, port = 3307
2. un utilisateur -> créé avec administrator : mysql user = moi , password =
lui

Que dois-je mettre dans la connect dbi ?
$dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";
$dbh = DBI->connect($dsn, $user, $password);

En appliquant le script suivant :

use DBI;
$dsn = 'DBI:mysql:database=memoria;host7.0.0.1;port307';
$dbh = DBI->connect($dsn, 'moi', 'lui') or die "Impossible de se
connecter à la base de données : $DBI::errstrn";

j'obtiens :
perl -w test_crea_mysql.pl
Name "main::dbh" used only once: possible typo at test_crea_mysql.pl line 8.

DBI connect('database=memoria;host7.0.0.1;port307','moi',...) failed:
Client does not support authentication protocol requested by server;
consider upgrading MySQL client at test_crea_mysql.pl line 8
Impossible de se connecter à la base de données : Client does not support
authentication protocol requested by server; consider upgrading MySQL client
Exit code: 255


et je vois pas ce que je peux upgrader puisque tout semble être au top... ou
est l'erreur?

Bien à vous. Merci.

Avatar
Denis -esp2008-
Bonsoir,

j'obtiens :
[...]
Client does not support authentication protocol requested by
server; consider upgrading MySQL client


Effectivement, je viens de regarder ce qui se disait sur perl.dbi.users,
et il semble que mysql ait changé de mécanisme d'authentification sans
que le pilote dbi ne soit mis à jour. Pour l'instant, la seule solution
est d'utiliser une version de mysql inférieure à la 4.1 (donc a priori
une version de la série 4.0.*).

Je n'ai pas trouvé la page de bug report de dbd::mysql, je chercherai
mieux à l'ocasion.

--
Denis

Avatar
Stéphane Lepolozec
Bonjour et merci pour m'avoir indiquer la voie de solution ainsi que pour
"perl.dbi.users" que je ne connaissais pas.
Il est possible de travail avec MySQL v4.1.7, DBI 1.45 et DBD-mysql 2.9003
en même temps malgré le changement de mécanisme d'authentification : il faut
passer en configuration de l'instance mysql, aller dans "Startup
Variables" - onglet "Security" et cocher l'option "Use old password
encryption method" puis relancer l'instance.
En passant par MySQL Administrator, cette manip est facile mais il me semble
qu'en plus, et contrairement à ce qui est indiquer, il faut à ce moment
revalider les mots de passe des utilisateurs...

use DBI;
$dsn = 'DBI:mysql:database=memoria;host=localhost;port307';
$dbh = DBI->connect($dsn, 'moi', 'lui') or die "Impossible de se connecter à
la base de données : $DBI::errstrn";
$sth = $dbh-> prepare ("INSERT INTO titre (id,abrege,complet) VALUES
(?,?,?)");
$sth -> execute('','Mt','Maitre');
$dbh -> disconnect();

donne

perl -w test_crea_mysql.pl
Exit code: 0


avec les bonnes valeurs dans la table :)

A nouveau, merci :)


"Denis -esp2008-" a écrit dans le
message de news:

Bonsoir,

j'obtiens :
[...]
Client does not support authentication protocol requested by
server; consider upgrading MySQL client


Effectivement, je viens de regarder ce qui se disait sur perl.dbi.users,
et il semble que mysql ait changé de mécanisme d'authentification sans
que le pilote dbi ne soit mis à jour. Pour l'instant, la seule solution
est d'utiliser une version de mysql inférieure à la 4.1 (donc a priori
une version de la série 4.0.*).

Je n'ai pas trouvé la page de bug report de dbd::mysql, je chercherai
mieux à l'ocasion.

--
Denis



Avatar
Frantz Dorsemaine
Bonjour,
je cherche à me connecter à une bdd mysql avec dbi.

J'ai réduit l'exemple à sa plus simple expression mais nada:

use DBI;
$dbh = DBI -> connect("dbi:mysql:memoria") or die "Impossible de se
connecter à la base de données : $DBI::errstrn";

La réponse est :

perl -w test_crea_mysql.pl


Name "main::dbh" used only once: possible typo at test_crea_mysql.pl line 7.
DBI connect('memoria','',...) failed: Can't connect to MySQL server on
'localhost' (10061) at test_crea_mysql.pl line 7
Impossible de se connecter à la base de données : Can't connect to MySQL
server on 'localhost' (10061)

Exit code: 255



Je suis sous windows XP SP2, mysql (MySQL v4.1.7) est installé avec tous les
para par défaut, la bdd 'memoria' est créée et comporte deux tables (MySQL
Query Broswer 1.1.1g), une connection et 3 utilisateurs sont disponibles
(MySQL Administrator 1.0.14) en dernières versions, mon firewall est
désactivé durant le test (résultat idem si actif).
DBI 1.45 est installé sur activeperl 5.8.4 810 avec le DBD-mysql 2.9003,
dernières versions trouvées avec ppm.

Débutant :( en perl et mysql, je ne sais pas où tourver l'erreur.

Merci pour toute aide :)


$BaseType="DBI:myqlPP:$Base:$IPServeur";

$BaseÛI->connect($BaseType,$Login,$Password)
or&DiagErreur("$DBI::errstr") ;