8.2 API Perl pour MySQL
8 Les interfaces pour MySQL
Manuel de Référence MySQL 4.1 : Version Française
. DBI avec DBD::mysql ->L'interface DBI . Plus d'informations relatives à DBI / DBD
|
8.2.2 L'interface DBI
Méthodes portables
Méthode
|
Description
|
connect
|
Etablit une connexion à un serveur de bases de données.
|
disconnect
|
Déconnecte du serveur de bases de données.
|
prepare
|
Prépare une commande SQL pour l'exécution.
|
execute
|
Exécute les requêtes préparées.
|
do
|
Prépare et exécute une commande SQL.
|
quote
|
Echappe une chaîne ou une valeur
BLOB
avant insertion.
|
fetchrow_array
|
Récupère la ligne suivante en tant que tableau de champs.
|
fetchrow_arrayref
|
Récupère la ligne suivante comme une référence de tableau de champs.
|
fetchrow_hashref
|
Récupère la ligne suivante en tant que référence pour un tableau associatif.
|
fetchall_arrayref
|
Récupère toutes les données comme un tableau de tableaux.
|
finish
|
Termine une requête et permet au système de libérer les ressources.
|
rows
|
Retourne le nombre de lignes affectées.
|
data_sources
|
Retourne un tableau de bases de données disponibles sur le serveur local.
|
ChopBlanks
|
Contrôle la suppression des espaces avec
fetchrow_*
.
|
NUM_OF_PARAMS
|
Nombre de marqueurs dans la requête préparée.
|
NULLABLE
|
Les colonnes qui peuvent être
NULL
.
|
trace
|
Performe un traçage pour les corrections.
|
Méthodes spécifiques à MySQL
Méthode
|
Description
|
insertid
|
La denière valeur
AUTO_INCREMENT
.
|
is_blob
|
Est-ce une valeur
BLOB
?
|
is_key
|
Est-ce une clef ?
|
is_num
|
Est-ce une colonne numérique ?
|
is_pri_key
|
Quelles colonnes sont des clefs primaires ?
|
is_not_null
|
Quelles colonnes NE peuvent PAS être
NULL
. Voir
NULLABLE
.
|
length
|
Taille maximale possible pour la colonne.
|
max_length
|
Taille maximale des colonnes actuellement présentes dans le résultat.
|
NAME
|
Noms des colonnes.
|
NUM_OF_FIELDS
|
Nombre de Number of fields returned.
|
table
|
Noms des tables dans le résultat.
|
type
|
Tout les types de colonnes.
|
Les méthodes Perl sont décrites dans les sections suivantes.
Les variables utilisée pour les valeurs de retour des méthodes ont les significations suivantes :
-
$dbh
-
Gestionnaire de base de données
-
$sth
-
Gestionnaire de requête
-
$rc
-
Code de retour (souvent un status)
-
$rv
-
Valeur de retour (souvent un comptage de lignes)
Méthodes DBI portables
-
connect($data_source, $username, $password)
-
Utilise la méthode
connect
pour crée une connexion de base
de données à la source. La valeur doit commencer par
DBI:nom_pilote:
.
Exemples d'utilisation de
connect
avec le pilote
DBD::mysql
:
$dbh = DBI->connect("DBI:mysql:$database", $user, $password); $dbh = DBI->connect("DBI:mysql:$database:$hostname", $user, $password); $dbh = DBI->connect("DBI:mysql:$database:$hostname:$port", $user, $password);
|
Si le nom d'utilisateur et/ou le mot de passe ne sont pas définis,
DBI
utilises la
valeur des variables d'environnements
DBI_USER
et
DBI_PASS
, respectivement.
Si vous ne spécifiez pas un nom d'hôte, il est à
'localhost'
par défaut. Si vous ne
spécifiez pas un numéro de port, il est mit par défaut au port par défaut de MySQL
(3306).Depuis la version 1.2009 de
Msql-Mysql-modules
, la valeur de
$data_source
accepte certains modificateurs :
-
mysql_read_default_file=nom_du_fichier
-
Lit le fichier
filename
en tant que fichier d'options. Pour plus d'informations
sur les fichiers d'options, consulter Fichier d'options
my.cnf
.
-
mysql_read_default_group=nom_du_groupe
-
Le groupe par défaut lors de la lecture d'un fichier d'options est normalement le groupe
[client]
. En spécifiant l'option
mysql_read_default_group
, le groupe par
défaut devient le groupe
[nom_du_groupe]
.
-
mysql_compression=1
-
Utiliser la communication compressée entre le client et le serveur (à partir de la version
3.22.3 de MySQL).
-
mysql_socket=/path/to/socket
-
Spécifie le chemin vers la socket Unix qui est utilisée pour se connecter au serveur.
(MySQL version 3.21.15 ou plus).
Plusieurs modificateurs peuvent être donnés, ils doivent être séparés par des point-virgules.Par exemple, si vous voulez éviter d'avoir à écrire le nom d'utilisateur et le mot de passe en dur
dans un script
DBI
, vous pouvez le prendre du fichier utilisateur d'options
~/.my.cnf
en écrivant votre appel à
connect
de la façon suivante :
$dbh = DBI->connect("DBI:mysql:$database" . ";mysql_read_default_file=$ENV{HOME}/.my.cnf", $user, $password);
|
Cet appel lira les options définies pour le groupe
[client]
dans le fichier
d'options. Si vous voulez le faire aussi pour le groupe
[perl]
par exemple,
vous pouvez utiliser ce qui suit :
$dbh = DBI->connect("DBI:mysql:$database" . ";mysql_read_default_file=$ENV{HOME}/.my.cnf" . ";mysql_read_default_group=perl", $user, $password);
|
-
disconnect
-
La méthode
disconnect
déconnecte le gestionnaire de base de données
du serveur.
On y fait appel avant de terminer le programme.Exemple :
-
prepare($statement)
-
Prépare une requête SQL pour l'exécution par le serveur de base de données
et retourne un gestionnaire de requête
($sth)
, que vous pouvez utiliser
pour invoquer la méthode
execute
.
Le plus souvent, vous gérez les requêtes
SELECT
(et ceux qui s'en rapprochent, comme
SHOW
,
DESCRIBE
, et
EXPLAIN
) à l'aide de
prepare
et
execute
.Exemple :
$sth = $dbh->prepare($statement) or die "Impossible de préparer $statement: $dbh->errstr\n";
|
-
execute
-
La méthode
execute
exécute une requête préparée. Pour les commandes
qui ne se rapprochent pas de
SELECT
,
execute
retourne le nombre
de lignes affectées. Si aucune ligne ne l'est,
execute
retourne
"0E0"
,
que Perl traite comme zéro mais considère comme vrai (true). Si une erreur survient,
execute
retourne
undef
. Pour les requêtes
SELECT
,
execute
ne fait que démarrer la requête SQL dans la base de données; vous avez
besoin d'utiliser une des méthodes
fetch_*
décrites ici pour récupérer les données.Exemple :
$rv = $sth->execute or die "ne peut exécuter la requête : $sth->errstr;
|
-
do($statement)
-
La méthode
do
prépare et exécute une requête SQL et retourne le nombre de lignes
affectées. Si aucune ne l'est,
do
retourne
"0E0"
, que Perl traite comme
zéro mais considère comme vrai (true). Cette méthode est généralement utilisée pour les
requêtes qui ne se rapprochent pas de
SELECT
qui ne peuvent être préparées à
l'avance (à cause d'une limitation du pilote) ou qui n'ont pas besoin d'être exécutées
plus d'une fois (insertions, suppressions, etc.). Exemple :
$rv = $dbh->do($statement) or die "Ne peut exécuter la commande $statement: $dbh- >errstr\n";
|
Généralement, la commande 'do' est plus rapide (et préférable) à
prepare/execute pour les requêtes ne contenant pas de paramètres.
-
quote($string)
-
La méthode
quote
est utilisée pour protéger les caractères spéciaux contenus
dans la chaîne et ajouter les guillemets externes requis.Exemple :
$sql = $dbh->quote($string)
|
-
fetchrow_array
-
Cette méthode récupère la ligne de données suivante et la retourne en tant que tableau
de valeurs de champs.Exemple :
while(@row = $sth->fetchrow_array) { print qw($row[0]\t$row[1]\t$row[2]\n); }
|
-
fetchrow_arrayref
-
Cette méthode récupère la ligne de données suivante et la retourne en tant que référence
de tableau de valeurs de champs.Exemple :
while($row_ref = $sth->fetchrow_arrayref) { print qw($row_ref->[0]\t$row_ref->[1]\t$row_ref->[2]\n); }
|
-
fetchrow_hashref
-
Cette méthode récupère la ligne de données et retourne une référence vers
un tableau associatif contenant des paires nom du champ / valeur. Cette méthode n'est
pas aussi efficace que l'utilisation des références sur tableaux comme expliqué plus
haut.Exemple :
while($hash_ref = $sth->fetchrow_hashref) { print qw($hash_ref->{firstname}\t$hash_ref->{lastname}\t\ $hash_ref- > title}\n); }
|
-
fetchall_arrayref
-
Cette méthode est utilisée pour faire en sorte que toutes les données (lignes) soient retournées par
la requête SQL. Elle retourne une référence à un tableau de références à des tableaux pour chaque ligne.
Vous pouvez accéder aux données en utilisant des boucles profondes.Exemple :
my $table = $sth->fetchall_arrayref or die "$sth->errstr\n"; my($i, $j); for $i ( 0 .. $#{$table} ) { for $j ( 0 .. $#{$table->[$i]} ) { print "$table->[$i][$j]\t"; } print "\n"; }
|
-
finish
-
Indique que plus aucune donnée ne sera récupérée du gestionnaire de requête. Vous appelez cette méthode
pour libérer le gestionnaire de connexion et les ressources système lui étant associées.Exemple :
-
rows
-
Retourne le nombre de lignes changées (mises à jour, supprimées, etc.) par la dernière
commande. En l'utilise généralement après les requêtes autres que
SELECT
exécutées
avec la méthode
execute
.Exemple :
-
NULLABLE
-
Retourne une référence vers un tableau de valeurs qui indiquent si les colonnes
peuvent contenir des valeurs
NULL
.
Les valeurs possibles pour chaque élément sont 0 ou la chaîne vide si la
colonne ne peut être
NULL
, 1 si elle peut, et 2 si l'état
NULL
de la colonne est inconnu.Exemple :
$null_possible = $sth->{NULLABLE};
|
-
NUM_OF_FIELDS
-
Cet attribut indique le nombre de champs retournés par une requête
SELECT
ou
SHOW FIELDS
. Vous pouvez l'utiliser pour savoir
si une requête a retourné un résultat : une valeur nulle indique que la requête
n'est pas une sélection, comme
INSERT
,
DELETE
, ou
UPDATE
.Exemple :
$nr_of_fields = $sth->{NUM_OF_FIELDS};
|
-
data_sources($driver_name)
-
Cette méthode retourne un tableau contenant les noms des bases de données disponibles
pour le serveur MySQL sur l'hôte
'localhost'
.Exemple :
@dbs = DBI->data_sources("mysql");
|
-
ChopBlanks
-
Cet attribut détermine si les méthodes
fetchrow_*
enlèvent les caractères
blancs au début et à la fin des valeurs retournées.Exemple :
-
trace($trace_level)
-
-
trace($trace_level, $trace_filename)
-
La méthode
trace
active ou désactive le traçage. Lorsqu'elle est invoquée
en tant que méthode de la classe
DBI
, elle affecte le traçage à tout les gestionnaire.
Lorsqu'elle est invoquée comme un gestionnaire de base de données ou de requête, elle n'affecte
le traçage que pour le gestionnaire donné (et tout ses descendants). Mettre
$trace_level
à 2 fournit des informations détaillées de traçage. Le mettre à 0 désactive le traçage.
Les sorties de traçages vont dans la sortie d'erreurs standards par défaut.
Si
$trace_filename
est spécifié, le fichier est ouvert et le pointeur de fichier est placé
à la fin de celui-ci et les sorties de
tout
les gestionnaires tracés sont écrits dans ce
fichier.Exemple :
DBI->trace(2); # trace tout DBI->trace(2,"/tmp/dbi.out"); # trace tout dans # /tmp/dbi.out $dth->trace(2); # trace ce gestionnaire de base de données $sth->trace(2); # trace ce gestionnaire de requête
|
Vous pouvez aussi activer le traçage
DBI
en définissant la variable
d'environnement
DBI_TRACE
. La définir en tant que valeur numérique revient
à appeler
DBI->(value)
. La définir en tant que chemin revient à appeler
DBI->(2,value)
.
Méthodes spécifiques à MySQL
Les méthodes montrées ici sont spécifiques à MySQL et ne font pas partie du
standard
DBI
. Beaucoup d'entre-elles sont aujourd'hui désapprouvées :
is_blob
,
is_key
,
is_num
,
is_pri_key
,
is_not_null
,
length
,
max_length
, et
table
.
Lorsque des alternatives utilisant le standard
DBI
existent, elles sont
mentionnées ici :
-
insertid
-
Si vous utilisez la fonctionnalité
AUTO_INCREMENT
de MySQL, la nouvelle
valeur auto-incrémentée sera stockée ici.Exemple :
$new_id = $sth->{insertid};
|
Vous pouvez, en alternative, utiliser
$dbh->{'mysql_insertid'}
.
-
is_blob
-
Retourne une référence vers un tableau de valeurs booléennes; pour chaque élément du tableau,
une valeur TRUE indique que la colonne en question est un
BLOB
.Exemple :
-
is_key
-
Retourne une référence vers un tableau de valeurs booléennes; pour chaque élément du tableau,
une valeur TRUE indique que la colonne en question est une clef.Exemple :
-
is_num
-
Retourne une référence vers un tableau de valeurs booléennes; pour chaque élément du tableau,
une valeur TRUE indique que la colonne en question contient une valeur numérique.Exemple :
-
is_pri_key
-
Retourne une référence vers un tableau de valeurs booléennes; pour chaque élément du tableau,
une valeur TRUE indique que la colonne en question est une clef primaire.Exemple :
$pri_keys = $sth->{is_pri_key};
|
-
is_not_null
-
Retourne une référence vers un tableau de valeurs booléennes; pour chaque élément du tableau,
une valeur FALSE indique que la colonne peut contenir
NULL
values.Exemple :
$not_nulls = $sth->{is_not_null};
|
is_not_null
est désapprouvé; il est préférable d'utiliser l'attribut
NULLABLE
(décrit plus haut), car c'est un standard DBI.
-
length
-
-
max_length
-
Chacune de ces méthodes retourne une référence vers un tableau de tailles de colonnes.
Le tableau
length
indique les tailles maximales de colonnes (comme déclarés lors
de la création de la table). Le tableau
max_length
indique la plus grande taille
occupée jusqu'à présent dans les colonnes de la table. Exemple :
$lengths = $sth->{length}; $max_lengths = $sth->{max_length};
|
-
NAME
-
Retourne une référence vers un tableau de noms de colonnes.Exemple :
-
table
-
Retourne une référence vers un tableau de noms de tables.Exemple :
-
type
-
Retourne une référence vers un tableau de types de colonnes.Exemple :
|