Chrooter apache
Ajout disque dur
Ajout carte
Audit des disques durs
Gestion des peripheriques
Disquette d'installation
Ajout d'un scanner
Graver en ligne de commande
Astuces
Astuces en Bash
Configuration reseau
Dns
Serveur cvs
Proxy squid 
Installation serveur ftp
Installation qmail 
Installation serveur courrier sous debian
Outil TCP/IP 
Le serveur samba
Connexion a distance securisee
Client/serveur vnc
Configurer apache
Dyndns
Chiffrer un fichier/dossier
Securiser son poste
Mur pare feu pas a pas
Authentification ht-access
Surveillance de serveur CACTI
Snort
Snort-inline
Securiser Apache avec mod_security
Filtrage squid/squidguard/dansguardian
Auditer son site web
Sécuriser son linux
Installer un Lamp avec ssl
Contrer les scans de ports
Traitement anti-spam
Installer/Utiliser tripwire
Utilisation de lilo
Les commandes Linux
Le multi-tache
Le crontab
Exploration de la configuration
Quotas
Messagerie
Installer une application
Debugger ses applications
Le format RPM
Mise a jour du noyau
Qemu
Tour d'horizon des principaux p2p
Récupération du système
Bips d'un pc
Astuces windows
Table Ascii
Lamerland
Conversion de fichiers musicaux
hakin9
Secureroot.com
Hackerthreads.org
Defcon
Hackerlounge
Les derniers exploits
Tous les codes sources
Securite sous Linux
Les logiciels libres quotidiens
Ezine divers
Madchat
Textes divers
Archives
 
Toutes les traductions
Toutes les traductions
Hackin9

Il y a actuellement 4 visiteurs connectés sur le site !

Google
Gestion de bases MySql avec PHP
Gestion de bases MySql avec PHP

 

Generalites
Connexion à un serveur Mysql : mysql_connect
Opérations sur les bases de données : création, suppression et sélection
Requêtes adressées à une base : mysql_query et mysql_db_query
Opérations sur les tables : création, suppression, modification
Opérations sur les enregistrements d'une table : ajout, suppression et mise à jour
Interroger la base : SELECT
Exemple
ésumé : les principales fonctions

 

Introduction

Dans ce chapitre, les généralités sur les bases de données et la structure des tables sont supposées acquises.
De façon générale, il est bien plus simple de stocker et de gérer des données dans une base de données que de les manipuler directement à l'aide de structures comme les fichiers et les tableaux.
Notamment la question de la recherche d'information y est bien plus aisée et épargne beaucoup de programmation. Nous allons voir les grandes phases de l'utilisation de PHP pour gérer et consulter une base MySql et les principales fonctions spécialisées dans l'accès à ces bases. Remarquer que PHP ne se limite pas à MySQL et intégre de telles interfaces d'accès aux principales bases de données relationnelles.

Connexion à un serveur Mysql : mysql_connect

La fonction mysql_connect($serveur, $login, $mdp) tente une connexion d'un utilisateur $login muni de son mot de passe $mdp, au serveur hébergé par la machine hote $host (localhost si la connexion est locale).

Bien entendu, cette connexion au serveur se sera possible que par un utilisateur possédant les droits suffisants.
La valeur $connexion retournée est un identifiant positif de connexion en cas de succès, sinon c'est 0 considéré comme FALSE.
Il est fortement recommandé de placer l'affectation de ces variables dans un fichier à inclure, lui-même placé en dehors de l'arborescence accessible par le serveur WEB. Inversement, mysql_close($connexion); supprime la liaison identifiée par $connexion.

<? /* le fichier param.php contient les valeurs des variables $serveur, $user, $pass */ #require("param.php"); /* connexion au serveur MySql */ #$connexion = mysql_connect($serveur, $login, $mdp) or die("Connexion impossible au serveur $host par $user"); #echo "connexion réussie de $login au serveur $serveur"; ?>

/*Autre façon : on peut précéder ces commandes du symbole @, pour empêcher l'éventuelle * émission de messages d'erreur. Bien entendu cela ne supprime pas mes erreurs, * mais permet au programmeur de les traiter lui-même*/

$connexion = @mysql_connect($serveur, $login, $mdp) ;
if ($connexion >0)
echo "Connexion réussie de $login au serveur $serveur
";
else
echo "Connexion impossible au serveur $serveur";

Opérations sur les bases de données : création, suppression et sélection

Ces 3 fonctions suivantes renvoient l'entier 1 en cas de succès, 0 en cas d'échec.
Les créations et suppressions sont normalement des privilèges de "root" l'administrateur MySQL
Par contre la sélection d'une base doit précéder ou accompagner (voir mysql_select_db) toute requête à cette base.

<? require("param.php"); $bd="test"; /* suppression de la base sur le serveur */ mysql_drop_db($bd, $connexion) or die("Suppression impossible de la base $bd" par $login) ; echo "suppression réussie de la base $bd, essai de re-création"; /* création de la base sur ce serveur */ mysql_create_db($bd, $connexion) or die("Création impossible de la base $bd par $login") ; echo "création réussie de la base $bd

"; ?> /* Connexion à la base $bd
* Si le paramètre $connexion est omis,
* il s'agit de la dernière connexion réussie au serveur */
mysql_select_db($bd, $connexion) or die("Connexion impossible à la base $bd par $login");
echo "connexion réussie à la base $bd pour l'utilisateur $login
";

Requêtes adressées à une base : mysql_query et mysql_db_query

La fonction PHP mysql_query($requete) est la fonction généraliste qui envoie la chaine $requete écrite en langage SQL, au moteur MySql afin que ce dernier l'exécute.
Implicitement, la requête s'adresse à la base précédemment sélectionnée par mysql_select_db
Sinon, on utilise mysql_db_query($bd, $requete) pour adresser la requête directement à la base
Selon le type de requete, cette fonction renvoie une valeur

* interprétable en booléen vrai-faux (pour DELETE, INSERT, UPDATE ..)
* identificateur de résultat, à partir duquel il faudra obtenir les données. C'est le cas pour la commande SELECT) pour laquelle il faudra utiliser les fonctions d'extraction spécifiques mysql_fetch_xxx() pour récupérer les lignes du résultat de la requête

Exemples :

/* les connexions au serveur et à la base sont déjà établies
* afficher le contenu de la table personnes */
$bd="test";
$table = "personnes";
$requete = "SELECT * FROM $table ORDER BY nom";
$resultat = mysql_query($requete);

/* Connaitre la liste des tables */
$resultat = mysql_list_tables ( $bd );
// donne le nombre de lignes dans le resultat
$nb = mysql_num_rows($resultat);
echo "Liste des tables de $bd :";
for ($i =0 ; $i < $nb ; $i++)
// donne le nom de la table numéro i dans la liste précédente
echo mysql_tablename($resultat , $i) . ";

Opérations sur les tables : création, suppression, modification

Soit à créer une table nommée personnes, dont les champs sont id (un numéro identifiant la personne, donc à déclarer comme clé primaire), nom (à indexer car il sera l'objet d'interrogations), prenom, sexe, date et emploi.
En SQL chacune de ces variables de champ doit être déclarée avec son type et d'éventuelles options
Voici la requête SQL de création de la tables personnes, et son exécution par un script PHP :

$bd="test";
$table = "personnes";
$requete= "CREATE TABLE $table (
id INT NOT NULL AUTO_INCREMENT,
nom VARCHAR(25),
prenom VARCHAR(25),
date_naissance DATE
sexe CHAR(1),
emploi VARCHAR(25),
PRIMARY KEY (id),
INDEX i_nom (nom)
)";

$resultat = mysql_db_query($bd, $requete);
/* la requete a t-elle réussi ? On teste le "booléen" renvoyé */
if ($resultat) echo "La table $table a bien été créée !";

/* Supprimer la table*/
$requete = "DROP TABLE $table" ;
$resultat = mysql_query($requete) or die("Impossible de supprimer $table") ;

Opérations sur les enregistrements d'une table : ajout, suppression et mise à jour

Ces 3 commandes SQL : INSERT, DROP et UPDATE agissent sur les lignes d'une table existantes

$table = "personnes";
$requete = "INSERT INTO $table (id, nom, prenom, sexe , emploi) VALUES (32,'Toto','Jules','m', 'formateur')";
$resultat = mysql_query($requete);
// Le prénom ne Toto n'est pas Jules mais Arthur

requete = "UPDATE $table SET prenom = 'Arthur'
WHERE nom = 'Toto'";
$resultat = mysql_query($requete);

// Finalement on supprime cet enregistrement
requete = "DELETE FROM $table
WHERE nom = 'Toto' AND prenom ='Arthur' ";
$resultat = mysql_query($requete);

Interroger la base : SELECT

Une telle requête s'écrit en SQL avec la commande SELECT. Son exécution produit une variable qui est un identificateur du résultat, par lequel nous pourrons obtenir explicitement les données.

$requete = "SELECT * FROM $table ";
$requete .= " WHERE id <=10
$requete .= " ORDER BY nom";
$resultat = mysql_query($requete);
// si besoin, pour connaitre le nombre $nb de lignes du résultat
$nb = mysql_num_rows($resultat);

3 fonctions peuvent être utilisées pour récupérer les informations
référencées par $resultat, après appel de mysql_query() sur une requête de type SELECT : mysql_fetch_array(), mysql_fetch_row(), mysql_fetch_object().

1. $ligne = mysql_fetch_row($resultat);
Cette fonction retourne un tableau indicé nommé ici $ligne, indicé à partir de 0, dont les éléments contiennent les valeurs des champs de la ligne courante pointée par $resultat, ou bien FALSE s'il ne reste plus de ligne.
Les appels consécutifs à mysql_fetch_row() déplace un pointeur vers la ligne suivante, si elle existe. Insérées dans une boucle while, ces appels permettent de décrire en séquence toutes les lignes du résultat.

2. $ligne = mysql_fetch_array($resultat); Cette fonction est une version étendue de mysql_fetch_row(). Ici $ligne désigne un tableau associatif dont les indices peuvent être remplacés par les noms des champs, ce qui permet de s'adresser directement à la valeur d'une colonne du résultat. Ainsi la valeur du champ nom du tableau $ligne s'obtient avec $ligne[nom]

3. $ligne= mysql_fetch_object($resultat); On obtient un objet construit à partir d'une ligne du resultat, ou FALSE si on a atteint la fin de la table Cet objet $ligne possède pour attributs tous les champs de la table, initialisés aux valeurs actuelles de cette ligne. Ainsi la valeur du champ nom de l'objet $ligne s'obtient avec la syntaxe $ligne->nom

Si nécessaire, on peut re-parcourir le résultat identifié par $resultat, en remettant le pointeur au début par la commande mysql_data_seek($resultat, 0);

Exemple

<? /* inclure les paramètres de connexion */ require("param.inc"); /* connexion au serveur MySql */ $connexion = mysql_connect($serveur, $login, $mdp) or die("Connexion impossible au serveur $serveur"); echo "connexion réussie de $user au serveur $serveur
"; /* connexion à la base */ mysql_select_db($bd) or die("Connexion impossible à la base $bd"); echo "connexion réussie à la base $bd pour l'utilisateur $login

"; /* interrogation classique */ $req = "SELECT * FROM $table"; /* affichage des lignes par row : indices numériques */ echo "Affichage par \"tableau indicé\"
"; $resultat = mysql_query($req); echo "<table border=2>"; echo "<tr> <th>Nom</th> <th>Prénom</th> <th>Date de naissance</th> <th>Rang</th></tr>>"; while ($ligne = mysql_fetch_row($resultat) ) echo "tr><td>$ligne[0]</td><td>$ligne[1]</td><$ligne[2]</td><td>$ligne[3]</td></tr>"; echo "</table>"; ?>

Résumé : les principales fonctions

Voici la liste des fonctions intégrés à PHP et spécialisées dans l'accès aux bases MySql.
Chacune fait l'objet d'une description dans la documentation disponible sur le site PHP à http://www.php.net/docs.php. La traduction française se trouve à http://www.php.net/manual/fr/

$connexion=mysql_connect($serveur, $login,$mdp) L'utilisateur $login ouvre une connexion au serveur $serveur, et reçoit en retour l'identifiant $connexion
mysql_close($connexion) Ferme la connexion MySQL identifiée par $connexion
mysql_select_db($bd,$connexion) Sélectionne la base de données nommée $bd
$resultat = mysql_query($requete[,$connexion]) La requête SQL $requete, écrite sous forme de chaine, est envoyée à la base déjà sélectionnée, et reçoit un identifiant de résultat
Celui-ci est un pseudo-booléen TRUE si la requete a été correctement exécutée (meme si aucune ligne n'a été modifiée ou sélectionnée). En cas de requete SELECT, $resultat permet d'accéder aux données extraites.
mysql_db_query($bd, $requete[,$connexion]) Idem, mais la base est d'abord sélectionnée
$nbchamps=mysql_num_fields($resultat) Retourne dans $nbchamps le nombre de champs du résultat
$nblignes = mysql_num_rows($resultat) Retourne dans $nblignes le nombre de lignes du résultat
$nb=mysql_affected_rows($connexion) Retourne le nombre de lignes affectées lors de la dernière requête de type INSERT, UPDATE,DELETE,CREATE ou DROP
$nomchamp = mysql_field_name($resultat, $i) Retourne le nom du champ numéro $i du résultat ($i de 0 à $nbchamp
$ligne = mysql_fetch_row($resultat) Retourne la ligne suivante du résultat dans un tableau indicé, dont les éléments contiennent les valeurs de cette ligne
$ligne = mysql_fetch_array($resultat) Retourne la ligne suivante du résultat dans un tableau associatif.
$ligne = mysql_fetch_object($resultat) Retourne la ligne suivante du résultat, dans un objet dont les attributs sont exactement les champs obtenus
$liste_bases = mysql_list_dbs()Retourne la liste des bases de données disponibles sur le serveur
$liste_tables = mysql_list_tables($bd)Retourne la liste des tables de la base $bd
$nom = mysql_db_name($resultat,$i)Retourne le nom de la $i ème base de donnée
$tab[$i] = mysql_tablename($liste_tables, $i)Lit le nom du champ numéro $i dans la table
mysql_data_seek($resultat,0) Déplace le pointeur interne de résultat au début du résultat
$num=mysql_errno() Retourne le numéro de message d'erreur de la dernière opération MySQL.
$texte=mysql_error() Retourne le texte associée avec l'erreur générée lors de la dernière requête.

Sources de l'article


 

Forum d'entraide
Les news du site
Formulaire en php
Administrer un serveur Mysql
Session en php
Gerer ses bases mysql
Les bases php
Securiser ses scripts PHP
Controler ses programmes avec RATS
Convertir une base sql en utf8
Astuces php
Python rapide
Tutorial Python
Tutorial Perl
Tutorial Perl complet
Tutoriel ruby
Tutoriel C
Introduction à gawk
Filtres et utilitaires
Find
Programmation Shell
Ecriture de scripts bash
Expressions regulieres
Vi
Introduction a Javascript
Compiler avec gcc
Tutoriel Assembleur
Guide du cracking pour débutant
Assembleur
Manual Unpacking
Différentes failles Web
Arp spoofing dans un réseau switché
Les intrusions
Les attaques externes
Defacage
Defacage complet
Buffer overflow
Netcat
Injection sql
Injection sql(suite)
John the Ripper
Spoofer un email
Utiliser google
La faille system
Usurper une identité
Le rooting
Shellcode sous Unix
La faille race condition
La faille xss
La faille xss (2)
Attaques sur un routeur
Azureus pas-a-pas
Lire les news de Linux-pour-lesnuls.com au format RSS
Gestion des paquets debian
101 commandes debian
Effet neon dans GIMP
Effet vapeur dans GIMP
Cours fonctionnalités de GIMP
Ensemble
Divers