LXIII. MySQL

Introduction

Ces fonctions vous permettent d'accéder aux bases de données MySQL. Le site officiel de cette base est http://www.mysql.com/.

La documentation de MySQL est disponible à http://www.mysql.com/documentation/.

Pré-requis

Afin de pouvoir les utiliser, vous devez compiler PHP avec le support MySQL.

Installation

En utilisant l'option --with-mysql. Si vous utilisez cette fonction sans préciser le chemin d'accès à la base MySQL, PHP utilisera les librairies clientes MySQL fournies en standard. Les utilisateurs qui font tourner d'autres applications qui utilisent elles-mêmes MySQL (par exemple, PHP 3 et PHP 4 utilisés comme des modules concurrents apache, ou encore auth-mysql), devraient toujours spécifier le chemin jusqu'à MySQL : --with-mysql=/path/to/mysql. Cela va forcer PHP à utiliser les librairies clientes installées par MySQL et évitera les conflits.

En PHP 5, MySQL n'est plus activé par défaut, et la librairie MysQL n'est plus fournie avec PHP. Lisez la FAQ pour savoir pourquoi.

Cette extension MySQL extension ne fonctionnera pas avec les versions de MySQL supérieure à la version 4.1.0. Pour cela, il faut utiliser l'extension MySQLi.

Avertissement

Des crashes et des problèmes de démarrage de PHP peuvent être rencontré lorsque vous chargez cette fonction en même temps que l'extension recode. Voyez l'extension recode pour plus de détails.

Note : Si vous avez besoin d'autres jeux de caractères que celui par défaut (latin), vous devez installer la librairie externe libmysql (non fournie), compilée avec ce jeu de caractères.

Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Tableau 1. Options de configuration

NomPar défautModifiable
mysql.allow_persistent"On"PHP_INI_SYSTEM
mysql.max_persistent"-1"PHP_INI_SYSTEM
mysql.max_links"-1"PHP_INI_SYSTEM
mysql.default_portNULLPHP_INI_ALL
mysql.default_socketNULLPHP_INI_ALL
mysql.default_hostNULLPHP_INI_ALL
mysql.default_userNULLPHP_INI_ALL
mysql.default_passwordNULLPHP_INI_ALL
mysql.connect_timeout"0"PHP_INI_SYSTEM
Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à ini_set().

Voici un éclaircissement sur l'utilisation des directives de configuration.

mysql.allow_persistent bool

Active ou désactive les connexions persistantes à la base de données MySQL.

mysql.max_persistent integer

Le nombre maximum de connexions persistantes aux bases de données MySQL, par processus.

mysql.max_links integer

Le nombre maximum de connexions aux bases de données MySQL, y compris les connexions persistantes, par processus.

mysql.default_port string

Le numéro de port TCP par défaut, utilisé pour se connecter à la base de données, lorsqu'aucun port n'est spécifié. Si aucun port par défaut est spécifié, le port sera alors obtenu en lisant la variable d'environnement MYSQL_TCP_PORT, l'entrée mysql-tcp dans le fichier /etc/services ou encore la constante de compilation MYSQL_PORT, dans cet order. Win32 n'utilisera aussi que la constante MYSQL_PORT.

mysql.default_socket string

Le nom par défaut de la socket lorsque l'on se conecte au serveur local, si aucune autre socket n'est spécifiée.

mysql.default_host string

Adresse par défaut du serveur, à utiliser lors de la connexion à un serveur MySQL, si aucun hôte n'est spécifié. Ne s'applique par lorsque le safe mode est activé.

mysql.default_user string

Utilisateur par défaut, à utiliser lors de la connexion à un serveur MySQL, si aucun utilisateur n'est spécifié. Ne s'applique par lorsque le safe mode est activé.

mysql.default_password string

Mot de passe par défaut, à utiliser lors de la connexion à un serveur MySQL, si aucun mot de passe n'est spécifié. Ne s'applique par lorsque le safe mode est activé.

mysql.connect_timeout integer

Durée maximale d'attente de la réponse d'un serveur, en secondes. Sous Linux, cette durée sert aussi lors de l'échange du premier avec le serveur.

Types de ressources

Il y a deux types de ressources utilisées par le module MySQL. Le premier est un identifiant de connexion au serveur, appelé mysql link, et le second est un identifiant de résultat de requête, appelé mysql result.

Constantes prédefinies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

Depuis PHP 4.3.0, il est possible de spécifier des options de client supplémentaires pour les fonctions mysql_connect() et mysql_pconnect(). Ces constantes sont les suivantes :

Tableau 2. Constantes client MySQL

ConstanteDescription
MYSQL_CLIENT_COMPRESSUtilise le protocole avec compression
MYSQL_CLIENT_IGNORE_SPACEAutorise les espaces après les noms de fonction
MYSQL_CLIENT_INTERACTIVEAutorise interactive_timeout secondes d'inactivité sur la connexion (au lieu de wait_timeout).

La fonction mysql_fetch_array() utilise une constante pour spécifier les différents types de formats de réponse. Les constantes suivante sont utilisées :

Tableau 3. Constantes de mysql_fetch_array

ConstanteDescription
MYSQL_ASSOC Les colonnes sont retournées dans un tableau, dont les index sont les noms de colonnes.
MYSQL_BOTH Les colonnes sont retournées dans un tableau ayant une indexation numérique et un système d'index correspondant au nom des colonnes.
MYSQL_NUM Les colonnes sont retournées dans un tableau avec un index numérique. Les colonnes sont numérotées dans leur ordre d'apparition. L'index commence à zéro.

Exemples

Cet exemple simple montre comment se connecter, exécuter une requête, lire les informations obtenues et se déconnecter d'une base de données MySQL.

Exemple 1. Exemple de présentation de l'extension MySQL

<?php
    
/* Connexion et s&eacute;lection de la base */
    
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
        or die(
"Could not connect");
    print
"Connexion r&eacute;ussie";
    
mysql_select_db("my_database") or die("Could not select database");

    
/* Ex&eacute;cuter des requ&ecirc;tes SQL */
    
$query = "SELECT * FROM my_table";
    
$result = mysql_query($query) or die("Query failed");

    
/* Afficher des r&eacute;sultats en HTML */
    
print "<table>\n";
    while (
$line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        print
"\t<tr>\n";
        foreach (
$line as $col_value) {
            print
"\t\t<td>$col_value</td>\n";
        }
        print
"\t</tr>\n";
    }
    print
"</table>\n";

    
/* Lib&eacute;ration des r&eacute;sultats */
    
mysql_free_result($result);

    
/* Fermeture de la connexion */
    
mysql_close($link);
?>

Table des matières
mysql_affected_rows --  Retourne le nombre de lignes affectées lors de la dernière requête SQL
mysql_change_user -- Change le nom de session de l'utilisateur actif
mysql_client_encoding --  Retourne le nom du jeu de caractères utilisé par le client MySQL
mysql_close -- Ferme la connexion MySQL
mysql_connect -- Ouvre une connexion à un serveur MySQL
mysql_create_db -- Crée une base de données MySQL
mysql_data_seek -- Déplace le pointeur interne de résultat
mysql_db_name -- Lit les noms des bases de données
mysql_db_query -- Envoie une requête MySQL à un serveur MySQL
mysql_drop_db -- Efface une base de données MySQL
mysql_errno --  Retourne le numéro d'erreur de la dernière commande MySQL
mysql_error --  Retourne le texte associé avec l'erreur générée lors de la dernière requête.
mysql_escape_string --  Protège une chaîne pour la passer à mysql_query()
mysql_fetch_array --  Retourne une ligne de résultat sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
mysql_fetch_assoc --  Lit une ligne de résultats dans un tableau associatif
mysql_fetch_field --  Retourne les données enregistrées dans une colonne sous forme d'objet.
mysql_fetch_lengths --  Retourne la taille de chaque colonne d'une ligne de résultat
mysql_fetch_object -- Retourne une ligne de résultat MySQL sous la forme d'un objet
mysql_fetch_row -- Retourne une ligne de résultat MySQL sous la forme d'un tableau
mysql_field_flags --  Retourne des détails sur une colonne MySQL
mysql_field_len -- Retourne la taille d'un champ de résultat MySQL
mysql_field_name --  Retourne le nom d'une colonne
mysql_field_seek --  Déplace le pointeur de résultat
mysql_field_table --  Retourne le nom de la table où se trouve une colonne
mysql_field_type -- Retourne le type de la colonne courante
mysql_free_result -- Efface le résultat de la mémoire
mysql_get_client_info -- Lit les informations sur le client MySQL
mysql_get_host_info -- Lit les informations sur l'hôte MySQL
mysql_get_proto_info -- Lit les informations sur le protocole MySQL
mysql_get_server_info -- Lit les informations sur le serveur MySQL
mysql_info --  Lit des informations à propos de la dernière requête
mysql_insert_id --  Retourne l'identifiant généré par la dernière requête INSERT.
mysql_list_dbs --  Liste les bases de données disponibles sur le serveur MySQL
mysql_list_fields -- Liste les champs du résultat MySQL
mysql_list_processes -- Liste les processus MySQL
mysql_list_tables -- Liste les tables d'une base de données
mysql_num_fields -- Retourne le nombre de champs d'un résultat MySQL
mysql_num_rows -- Retourne le nombre de lignes d'un résultat
mysql_pconnect --  Ouvre une connexion persistante à un serveur MySQL.
mysql_ping -- Pingue le serveur, et se reconnecte au besoin
mysql_query -- Envoie une requête SQL à un serveur MySQL
mysql_real_escape_string --  Protège les caractères spéciaux d'une commande SQL.
mysql_result -- Retourne un champ d'un résultat
mysql_select_db -- Sélectionne une base de données MySQL
mysql_stat -- Retourne le statut courant du serveur
mysql_tablename -- Lit le nom de la table qui contient un champ
mysql_thread_id -- Retourne l'identifiant du thread courant
mysql_unbuffered_query --  Exécute une requête SQL sans mobiliser les résultats