Académique Documents
Professionnel Documents
Culture Documents
Cours MySQL Avec PHP
Cours MySQL Avec PHP
Hugo Etivant
http://cyberzoide.developpez.com
Introduction
MySQL drive directement de SQL (Structured Query Language) qui est un langage de requte vers les bases de donnes exploitant le modle relationnel. Il en reprend la syntaxe mais nen conserve pas toute la puissance puisque de nombreuses fonctionnalits de SQL napparaissent pas dans MySQL (slections imbriques, cls trangres) Le serveur de base de donnes MySQL est trs souvent utilis avec le langage de cration de pages web dynamiques : PHP. Il sera discut ici des commandes MySQL utilisables via PHP dans les conditions typiques dutilisation dans le cadre de la gestion dun site personnel hberg gratuitement (par exemple sur Free.fr).
Script PHP
HTTP
http://cyberzoide.developpez.com
Sommaire
Thorie des bases de donnes relationnelles Syntaxe de MySQL Fonctions de MySQL Interface avec PHP Administration avec loutil phpMyAdmin
http://cyberzoide.developpez.com
1
Le CyberZode Qui Frtille
http://cyberzoide.developpez.com
Les relations
Une relation est une table comportant des colonnes (appeles aussi attributs) dont le nom et le type caractrisent le contenu qui sera insr dans la table. Imaginons que lon veuille stocker dans notre base de donnes notre carnet dadresses. On va donc crer la relation Personne qui aura pour attributs : nom, prnom, adresse, tlphone. Autrement dit, cest une table nomme Personne possdant les colonnes : nom, prnom, adresse, tlphone. Les lignes que contiendra cette table seront appeles enregistrements ou tuples.
Personnes nom Dupond prnom Marc adresse 8 rue de loctet tlphone 0123456789
http://cyberzoide.developpez.com
Algbre relationnelle
Lalgbre relationnelle regroupe toutes les oprations possibles sur les relations. Voici la liste des oprations possibles : Projection : on ne slectionne quun ou plusieurs attributs dune relation (on ignore les autres). Par exemple nafficher que les colonnes nom et prnom de la table Personnes. Jointure : on fabrique une nouvelle relation partir de 2 ou plusieurs autres en prenant comme pivot 1 ou plusieurs attributs. Par exemple, on concatne la table du carnet dadresse et celle des inscrits la bibliothque en fonction du nom de famille (ces typiquement du recoupement de fichiers). Slection : on slectionne tous les tuples ou bien seulement une partie en fonction de critres de slection qui portent sur les valeurs des attributs. Par exemple nafficher que les lignes de la table Personnes qui vrifient la condition suivante : le nom ne commence pas par la lettre C. Cette algbre est facilement possible avec les commandes de MySQL (SELECT FROM WHERE).
http://cyberzoide.developpez.com
Projection
Personnes nom Martin Dupond Dupond prnom Pierre Jean Marc adresse 32 all Poivrot 8 rue de loctet tlphone 0526389152 0123456789 7 alle des vers 0258941236
Jointure
Personnes nom Martin Dupond prnom Pierre Jean adresse 32 all Poivrot tlphone 0526389152 nom Dupond Jospin Martin 7 alle des vers 0258941236 Bibliothque Dernierlivre Robinson Faust Misre
On joint les deux tables, grce la colonne nom. SELECT Personnes.prnom, dernierlivre FROM Personnes, Bibliothque WHERE Personnes.nom = Bibliothque.nom Et on combine cette jointure une projection sur les attributs nom et dernierlivre. Attention lever toute ambigut sur les noms dattribut dans le cas o deux tables possdent des colonnes de mme nom.
9
http://cyberzoide.developpez.com
Slection
Personnes nom Martin Dupond Dupond prnom Pierre Jean Marc adresse 32 all Poivrot 8 rue de loctet tlphone 0526389152 0123456789 7 alle des vers 0258941236
On ne slectionne que les tuples dont lattribut nom est gale Dupond.
http://cyberzoide.developpez.com
2
Le CyberZode Qui Frtille
Syntaxe de MySQL
http://cyberzoide.developpez.com 11
http://cyberzoide.developpez.com
12
borne suprieure 127 255 32767 65535 8388607 16777215 2147483647 4294967295 9223372036854775807 18446744073709551615
domaine ngatif : borne infrieure borne suprieure -3.402823466E+38 -1.175494351E-38 -1.7976931348623157E+308 -2.2250738585072014E-308
FLOAT DOUBLE*
http://cyberzoide.developpez.com
16
description Date au format anglophone AAAA-MM-JJ. Date et heure au format anglophone AAAA-MM-JJ HH:MM:SS. Affiche la date et lheure sans sparateur : AAAAMMJJHHMMSS. Idem mais M vaut un entier pair entre 2 et 14. Affiche les M premiers caractres de TIMESTAMP. Heure au format HH:MM:SS. Anne au format AAAA.
description
En cas dinsertion dun enregistrement en laissant vide un attribut de type TIMESTAMP, celui-ci prendra automatiquement la date et heure de linsertion. Contrairement Unix (o le timestamp est le nombre de secondes coules depuis le 1er janvier 1970), en MySQL, il est une chane de format comme indiqu ci-contre.
http://cyberzoide.developpez.com
17
TIMESTAMP(M) Idem mais M vaut un entier pair entre 2 et 14. Affiche les M premiers caractres de TIMESTAMP. TIME YEAR Heure au format HH:MM:SS. Anne au format AAAA.
Le format de date AAAA-MM-JJ signifie : anne sur 4 chiffre, mois sur 2 chiffres et jour sur 2 chiffres avec pour sparateur le tiret. Le format dheure HH:MM:SS signifie : heure, minute et seconde chacune sur 2 chiffres, avec pour sparateur les deux points. Dans le format tendu qui comprend la date et lheure, des deux dernires sont spares par un espace. Les formats de date sont assez permissifs car des variantes sont tolres. Il est possible de mettre nimporte quel caractre qui ne soit pas un chiffre en guise de sparateur, il est aussi possible de na pas en mettre, comme cela est affich par TIMESTAMP.
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 18
Identificateurs
Les noms des bases, relations, attributs, index et alias sont constitus de caractres alphanumriques et des caractres _ et $. Un nom comporte au maximum 64 caractres. Comme les bases de donnes et les relations sont codes directement dans le systme de fichiers, la sensibilit la casse de MySQL dpend de celle du systme dexploitation sur lequel il repose. Sous Windows, la casse na pas dimportance ; alors que sous Unix, elle en a ! Le point . est un caractre rserv utilis comme sparateur entre le nom dune base et celui dune relation, entre le nom dune relation et celui dun attribut. Exemple : SELECT base1.table25.attribut5 FROM base1.table25
http://cyberzoide.developpez.com
21
Exemple (I)
Imaginons que lon veuille construire la version web dun journal papier. Nous devrons crer une table pour stocker les articles de presse. Les informations relatives un article sont les suivantes : titre, texte, date de parution, auteur, rubrique. Un titre ayant une longueur raisonnable, il sera de type VARCHAR(80), le texte pourra tre trs grand : TEXT (65535 caractres !), la date sera au format DATE (YYYY:MM:JJ). Lauteur pourra tre cod sur un VARCHAR(80). Et la rubrique pourrait tre un ENUM. CREATE TABLE article ( id MEDIUM INT UNSIGNED PRIMARY KEY, titre VARCHAR(80), texte TEXT, parution DATE, auteur VARCHAR(80), rubrique ENUM(conomie,sports,international,politique,culture) )
http://cyberzoide.developpez.com 22
Exemple (II)
Cette dfinition apporte certaines limitations : le nombre et le nom des rubriques sont fixs la cration de la relation (CREATE TABLE). Bien sr, il sera toujours possible de modifier la dfinition de la table (ALTER TABLE) pour modifier ou ajouter une rubrique ; mais ce ne sera pas pratique du tout. On peut imaginer une interface web qui permette un administrateur dajouter, de renommer ou de supprimer des rubriques. Pour cela on va crer une nouvelle relation : la table rubrique. La relation article contiendra non plus le nom de la rubrique mais une rfrence vers le nom de cette rubrique. Ainsi, lors dune slection, il faudra faire une jointure entre les deux tables article et rubrique pour connatre le nom de la rubrique associe un article. CREATE TABLE article ( CREATE TABLE rubrique ( id TINYINT UNSIGNED PRIMARY KEY, label VARCHAR(40) rubrique_idx TINYINT ) ) SELECT * FROM article,rubrique WHERE article.rubrique_idx=rubrique.id
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 23
http://cyberzoide.developpez.com
24
http://cyberzoide.developpez.com
26
Cl primaire (I)
Pour des raisons pratiques, nous souhaitons pouvoir associer chacun des enregistrements de la relation un identifiant numrique unique qui puise tre pass en paramtre nos scripts PHP. Pour cela on rajoute un nouvelle attribut de type entier. Pour nous facilit la tche, cet entier ne devra pas tre sign mais tre suffisamment grand pour identifier tous nos enregistrements car destin un dcompte (donc dbute forcment 1 et pas -127 par exemple). Dans notre exemple, le carnet dadresse ne devrait pas excder plusieurs centaines de personnes. Ainsi un attribut de type SMALLINT UNSIGNED devrait faire laffaire. Nous le nommerons par la suite : id. Cet attribut devra ne jamais tre vide, il faut donc prciser loption NOT NULL pour le forcer prendre une valeur de son domaine (entre 0 et 65535). Il devra aussi tre unique, cest--dire que deux enregistrements ne pourront pas avoir une valeur identique de id. Il faut alors faire la dclaration suivante : UNIQUE (id) la suite de la liste des attributs. Pour simplifier, on utilisera loption PRIMARY KEY qui regroupe NOT NULL et UNIQUE en remplacement des deux dernires dclarations. Et pour finir, il faut signifier que cette valeur doit sincrmenter automatiquement chaque insertion dun enregistrement grce loption AUTO_INCREMENT.
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 27
Cl primaire (II)
Notre exemple devient : CREATE TABLE Personne ( id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, nom VARCHAR(40), prnom VARCHAR(40), adresse TINYTEXT, tlphone DECIMAL(10,0) ) Cet identifiant numrique unique auto-incrmental, sappelle une cl primaire . La numrotation des cls primaires, dbute 1 et pas 0.
Personnes Id 1 nom Dupond prnom Marc adresse 8 rue de loctet
http://cyberzoide.developpez.com
tlphone 0123456789
28
Cl primaire (III)
Notre cl primaire peut tre associe simultanment plusieurs attributs mais selon une syntaxe diffrente. Si au lieu de crer un identifiant numrique unique, on souhaite simplement interdire davoir des doublon sur le couple (nom,prnom) et den interdire la nullit, on va crer une cl primaire sur ce couple. La connaissance des seuls nom et prnom suffit identifier sans ambigut un et un seul enregistrement.
Mauvaise syntaxe : CREATE TABLE Personne ( nom VARCHAR(40) PRIMARY KEY, prnom VARCHAR(40) PRIMARY KEY, adresse TINYTEXT, Bonne syntaxe : tlphone DECIMAL(10,0) CREATE TABLE Personne ( ) nom VARCHAR(40), prnom VARCHAR(40), adresse TINYTEXT, tlphone DECIMAL(10,0), PRIMARY KEY (nom,prnom) )
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 29
http://cyberzoide.developpez.com
30
http://cyberzoide.developpez.com
31
32
enregistrement interdit car le couple (Martin, Marc) est un doublon du couple (nom,prnom)
http://cyberzoide.developpez.com
33
Index (I)
Lors de la recherche dinformations dans une relation, MySQL parcours la table correspondante dans nimporte quel ordre. Dans le cas dun grand nombre de lignes, cette recherche est trs trs longue du fait du parcours de TOUTE la table. Pour y remdier, une optimisation possible et FORTEMENT recommande, est dutiliser des indexs. La cration dun index associ un attribut ou un ensemble ordonn dattributs va crer une liste ordonne des valeurs de ces attributs et de ladresse de la ligne associe. Cest sur les valeurs de cette liste que se fera les recherches et les tris. Les algorithmes de recherche et de tri sur des ensembles ordonnes sont normment plus rapides ! Ainsi, dune recherche cot prohibitif, on passe une recherche sur un ensemble dj tri. On gagne donc normment en temps daccs aux informations. Bien que cela ralentisse les mises jour (insertion, suppression, modification de cl). On choisira de crer des indexs sur les attributs qui seront les plus sollicits par les recherches ou utiliss comme critre de jointure. Par contre, on pargnera les attributs qui contiennent peu de valeurs diffrentes les unes des autres et ceux dont les valeurs sont trs frquemment modifies.
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 34
Index (II)
Syntaxe : INDEX index (liste des attributs) Exemple, pour crer un index sur les 3 premiers caractres seulement de lattribut nom : INDEX idx_nom (nom(3)) Exemple, pour crer un index sur le couple (nom,prnom) : INDEX idx_nom_prenom (nom,prnom) Un index peut porter sur 15 colonnes maximum. Une table peut possder au maximum 16 indexs. Un index peut avoir une taille dau maximum 256 octets et ne doit porter que sur des attributs NOT NULL. Il suffit de suffixer lattribut (CHAR, VARCHAR) pour dire de ne prendre que les M premiers caractres pour lindexation.
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 35
http://cyberzoide.developpez.com
36
http://cyberzoide.developpez.com
37
Ajouter un attribut
Syntaxe : ALTER TABLE relation ADD definition [ FIRST | AFTER attribut] Ajoutons lattribut fax qui est une chane reprsentant un nombre de 10 chiffres: ALTER TABLE Personnes ADD fax DECIMAL(10,0) Nous aurions pu forcer la place o doit apparatre cet attribut. Pour le mettre en tte de la liste des attributs de la relation, il faut ajouter loption FIRST en fin de commande. Pour le mettre aprs lattribut tlphone, il aurait fallu ajouter AFTER tlphone. Note : il ne doit pas dj avoir dans la relation un attribut du mme nom !
http://cyberzoide.developpez.com
38
http://cyberzoide.developpez.com
39
40
http://cyberzoide.developpez.com
41
http://cyberzoide.developpez.com
42
http://cyberzoide.developpez.com
43
http://cyberzoide.developpez.com
45
http://cyberzoide.developpez.com
46
Ajouter un index
Une table ne peut comporter que 32 indexs. Et un index ne peut porter que sur 16 attributs maximum la fois. Syntaxe : ALTER TABLE relation ADD INDEX index (attributs) Exemple : ALTER TABLE Personnes ADD INDEX nom_complet (nom,prnom) Dans cet exemple, on a ajout la relation Personnes un index que lon nomme nom_complet et qui sapplique aux deux attributs nom et prnom. Ainsi, les recherches et les tris sur les attributs nom et prnom seront grandement amliors. Car un index apporte les changements sous-jacents permettant doptimiser les performances du serveur de base de donnes.
http://cyberzoide.developpez.com
47
Supprimer un index
Syntaxe : ALTER TABLE relation DROP INDEX index Exemple : ALTER TABLE Personnes DROP INDEX nom_complet Cette exemple permet de supprimer lindex nomm nom_complet de la relation Personnes.
http://cyberzoide.developpez.com
48
http://cyberzoide.developpez.com
51
http://cyberzoide.developpez.com
52
http://cyberzoide.developpez.com
54
Supprimer un enregistrement
Attention, la suppression est dfinitive ! Syntaxe : DELETE [ LOW_PRIORITY ] FROM relation [ WHERE condition ] [ LIMIT a ] Exemple : DELETE FROM Personnes WHERE nom=Martin AND prnom=Marc Pour vider une table de tous ces lments, ne pas mettre de clause WHERE. Cela efface et recre la table, au lieu de supprimer un un chacun des tuples de la table (ce qui serait trs long). Exemple : DELETE FROM Personnes
http://cyberzoide.developpez.com
55
http://cyberzoide.developpez.com
56
http://cyberzoide.developpez.com
57
http://cyberzoide.developpez.com
58
1
SELECT Nom FROM Gens
Gens Nom Dupond Martin Dupont Martin Dupond Chirac Gens Nom Dupond Martin Dupont Chirac
2 3
http://cyberzoide.developpez.com
59
4 5
Gens Nom Chirac Dupond
SELECT DISTINCT Nom FROM Gens WHERE Nom <> Chirac ORDER BY Nom ASC LIMIT 2
http://cyberzoide.developpez.com
60
Optimisation
Aprs la suppression de grandes parties dune table contenant des index, les index des tuples supprims sont conservs, rallongeant dautant les slections. Pour supprimer ces index obsoltes et vider les trous , il faut loptimiser. Syntaxe : OPTIMIZE TABLE Relation Exemple : OPTIMIZE TABLE Personnes
http://cyberzoide.developpez.com
61
qui permet de concatner deux relation en prenant un attribut comme pivot. Il est possible de concatner deux relation sur plusieurs attributs la fois, ou mme de concatner X relation sur Y attributs. Les requtes utilisant trs souvent les jointures, il a t cr une syntaxe spciale plus rapide : JOIN que la mthode vue plus haut : avec la clause WHERE. Ainsi la jointure prcdente peut scrire aussi :
SELECT Personnes.nom, nblivres FROM Personnes INNER JOIN Bibliothque USING (nom)
ce qui signifie que les deux relations Personnes et Bibliothque sont concatne (INNER JOIN) en utilisant (USING) lattribut nom.
http://cyberzoide.developpez.com
62
La mthode INNER JOIN ninclus les enregistrements de la premire table que sils ont une correspondance dans la seconde table.
Personnes
Nom Martin Tartan Dupond Prnom Jean Pion Jacques
Bibliothque
Nom Martine Tartan Dupond Nblivres 5 10 3
Rsultat de la jointure
Nom Tartan Dupond Nblivres 10 3
http://cyberzoide.developpez.com
63
Bibliothque
Nom Martine Tartan Dupond Nblivres 5 10 3
Rsultat de la jointure
Nom Martin Tartan Dupond Nblivres NULL 10 3
http://cyberzoide.developpez.com
64
3
Le CyberZode Qui Frtille
Fonctions de MySQL
http://cyberzoide.developpez.com 65
Les fonctions
Bien que ces fonctions appartiennent typiquement MySQL, la cration dun chapitre part se justifie par le fait que je vais me contenter ici dnumrer les fonctions les plus courantes. Reportez-vous au manuel MySQL pour la liste dtaille de toutes les fonctions disponibles dans votre version du serveur MySQL. Ces fonctions sont ajouter vos requtes dans un SELECT, WHERE, GROUP BY ou encore HAVING. Dabord sachez que vous avez votre disposition : les parenthses ( ), les oprateurs arithmtiques (+, -, *, /, %), les oprateurs binaires (<, << , >, >>, |, &), les oprateurs logiques qui retournent 0 (faux) ou 1 (vrai) (AND, OR, NOT, BETWEEN, IN), les oprateurs relationnels (<, <=, =, >, >=, <>). Les oprateurs et les fonctions peuvent tres composs entre eux pour donner des expressions trs complexes.
http://cyberzoide.developpez.com 66
Quelques exemples
SELECT nom Liste du nom des produits dont le prix est infrieur ou gale 100.5 EUR. FROM produits WHERE prix <= 100.5 SELECT nom,prnom Liste des nom et prnom des lves dont lge est compris entre 12 et 16 ans. FROM lves WHERE age BETWEEN 12 AND 16 SELECT modle FROM voitures WHERE couleur IN (rouge, blanc, noir) SELECT modle FROM voitures WHERE couleur NOT IN (rose, violet) Liste des modles de voiture dont la couleur est dans la liste : rouge, blanc, noir. Liste des modles de voiture dont la couleur nest pas dans la liste : rose, violet.
http://cyberzoide.developpez.com
67
http://cyberzoide.developpez.com
68
Fonctions mathmatiques
Fonction ABS(x) SIGN(x) FLOOR(x) CEILING(x) ROUND(x) EXP(x), LOG(x), SIN(x), COS(x), TAN(x), PI() POW(x,y) RAND(), RAND(x) TRUNCATE(x,y) SELECT nom FROM filiales WHERE SIGN(ca) = -1 ORDER BY RAND()
Le CyberZode Qui Frtille
Description Valeur absolue de X. Signe de X, retourne -1, 0 ou 1. Arrondi lentier infrieur. Arrondi lentier suprieur. Arrondi lentier le plus proche. Bon, l cest les fonctions de maths de base Retourne X la puissance Y. Retourne un nombre alatoire entre 0 et 1.0 Si x est spcifi, entre 0 et X Tronque le nombre X la Yme dcimale. Cet exemple affiche dans un ordre alatoire le nom des filiales dont le chiffre daffaire est ngatif. A noter que : SIGN(ca) = -1 ! ca < 0
http://cyberzoide.developpez.com 69
Fonctions de chanes
Fonction TRIM(x) LOWER(x) UPPER(x) LONGUEUR(x) LOCATE(x,y) CONCAT(x,y,) SUBSTRING(s,i,n) SOUNDEX(x) Description Supprime les espaces de dbut et de fin de chane. Converti en minuscules. Converti en majuscules. Retourne la taille de la chane. Retourne la position de la dernire occurrence de x dans y. Retourne 0 si x nest pas trouv dans y. Concatne ses arguments. Retourne les n derniers caractres de s en commenant partir de la position i. Retourne une reprsentation phontique de x.
SELECT UPPER(nom) FROM clients WHERE SOUNDEX(nom) = SOUNDEX(Dupond) On affiche en majuscules le nom de tous les clients dont le nom ressemble Dupond.
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 70
SELECT titre FROM article WHERE (TO_DAYS(NOW()) TO_DAYS(parution)) < 30 Cet exemple affiche le titre des articles parus il y a moins de 30 jours.
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 71
SELECT DISTINCT model FROM voiture GROUP BY model HAVING COUNT(couleur) > 10 SELECT COUNT(*) FROM client
SELECT DISTINCT produit.nom, SUM(vente.qt * produit.prix) AS total FROM produit, vente WHERE produit.id = vente.produit_idx Classement des produits GROUP BY produit.nom par la valeur totale vendue. ORDER BY total
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 72
4
Le CyberZode Qui Frtille
Connexion (I)
Pour se connecter une base depuis un script php, il faut spcifier un nom de serveur, un nom dutilisateur, un mot de passe et un nom de base. Aucune connexion nest possible sans authentification auprs du serveur de base de donnes. Les actions possibles de lutilisateur sur la base laquelle il se connecte dpendent des droits qui lui auront t fournis par ladministrateur de la base de donnes. mysql_connect($server,$user,$password) : permet de se connecter au serveur $server en tant quutilisateur $user avec le mot de passe $password, retourne lidentifiant de connexion si succs, FALSE sinon. Si ces arguments manquent, les valeurs par dfaut du fichier de configuration php.ini seront utilises. mysql_select_db($base[,$id]) : permet de choisir la base $base, peut prendre un identifiant $id de connexion ; retourne TRUE en cas de succs, sinon FALSE. Les identifiants de connexion ne sont pas ncessaires si on ne se connecte qu un seul serveur la fois, ils permettent seulement de lever toute ambigut en cas de connexions multiples (vers plusieurs serveurs dans le mme script).
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 74
Connexion (II)
mysql_close([$id]) : permet de fermer la connexion un serveur de bases de donnes, largument optionnel $id est lidentifiant de session retourn louverture de la connexion. A not que toutes les connexions aux serveurs de bases de donnes sont automatiquement fermes la fin de lexcution du script qui les aura ouvertes. Dans le cas o le visiteur du site doit naviguer travers diffrents script PHP qui se connectent tous au mme serveur, il est prfrable davoir recours aux connexions persistantes . Une connexion persistante est ouverte avec la fonction mysql_pconnect() qui est en tout point comparable mysql_connect() la seule diffrence que la connexion nest pas ferme la fin du script qui a ouvert la connexion. Ainsi, les scripts suivants peuvent continuer lancer des requtes la base de donnes sans avoir rouvrir de connexion en direction du serveur. Une connexion persistante ne peut pas tre ferme avec la fonction mysql_close(). Au del dun certain temps dinactivit, la ou les connexions persistantes ouvertes sont automatiquement fermes.
http://cyberzoide.developpez.com
75
Connexion (III)
Exemple 1 : if( $id = mysql_connect(localhost,foobar,0478) ) { if(mysql_select_db(gigabase) ) { echo Succs de connexion.; /* code du script */ } else { die(Echec de connexion la base.); } mysql_close($id); } else { die(Echec de connexion au serveur de base de donnes.); }
http://cyberzoide.developpez.com
76
Connexion (IV)
Exemple 2 : @mysql_connect(localhost,foobar,0478) or die(Echec de connexion au serveur.); @mysql_select_db(gigabase) or die(Echec de slection de la base.); Cet exemple est quivalent au prcdent mais plus court crire. Le symbole @ (arobase) permet dviter le renvoi de valeur par la fonction quil prcde. On pourra avantageusement intgrer ce code dans un fichier que lon pourra joindre par include(). Cest aussi un moyen de scuriser le mot de passe de connexion. Une connexion persistante vite davoir rouvrir une connexion dans chaque script. Les connexions sont automatiquement fermes au bout dun certain temps en cas dabsence de toute activit
http://cyberzoide.developpez.com
77
Interrogation
Pour envoyer une requte une base de donne, il existe la fonction : mysql_query($str) qui prend pour paramtre une chane de caractres qui contient la requte crite en SQL et retourne un identificateur de rsultat ou FALSE si chec. Exemple : $result = mysql_query(SELECT tlphone FROM Personnes WHERE nom=\$name\); Cet exemple recherche le tlphone dune personne portant pour nom la valeur de la chane $name. Lidentificateur de rsultat $result permettra dautres fonctions dextraire ligne par ligne les donnes retournes par le serveur. Chaque appel cette fonction retournera un tuple du rsultat. Cest pourquoi cette instruction pourra tre utilise au sein dune boucle while qui sarrtera lorsque mysql_query() renverra FALSE.
http://cyberzoide.developpez.com
78
mysql_num_rows($result) : retourne le nombre de lignes retournes par la dernire requte SELECT dont on connat lidentifiant de rsultat $result.
$requet = SELECT name FROM users WHERE birth > \1980-05-10\; $result = mysql_query($requet) or die(Erreur de base de donnes.); $num = mysql_num_rows();
http://cyberzoide.developpez.com
82
Lindex commence zro. Elles ne peuvent tre utilise quaprs un appel la fonction mysql_query() retournant le pointeur de rsultat $result.
http://cyberzoide.developpez.com
83
http://cyberzoide.developpez.com
84
Rsultats :
nom id title mesg hits author_idx date taille 20 255 65535 8 20 19 type int blob blob int int datetime not_null blob not_null blob not_null unsigned not_null unsigned not_null
) drapeaux not_null primary_key unsigned auto_increment table forum forum forum forum forum forum
85
http://cyberzoide.developpez.com
http://cyberzoide.developpez.com
http://cyberzoide.developpez.com
88
Fonctions additionnelles
Quelques fonctions supplmentaires trs utiles :
mysql_free_result($result) : efface de la mmoire du serveur les lignes de rsultat de la requte identifies par $requet. Trs utile pour amliorer les performances du serveur. A nutiliser que si votre script utilise vraiment beaucoup de mmoire. mysql_insert_id([$id]) : retourne lidentifiant dun attribut cl primaire AUTO_INCREMENT de la dernire insertion. mysql_data_seek($result, $row) : Permet de prpositionner le pointeur interne de rsultat $result la ligne $row. Le prochain appel une fonction dextraction de tuple du rsultat ira directement cette ligne. Retourne TRUE si succs et FALSE sinon.
Penser bien tester la valeur de retour des fonctions (mysql_query et les autres) afin de dtecter toute erreur et dviter de polluer votre page avec des Warnings.
http://cyberzoide.developpez.com
89
Connexions persistantes :
mysql.allow_persistent boolen Active ou dsactive les connexions persistantes. mysql.max_persistent entier Nombre maximum de connexions persistantes par processus.
Connexions :
mysql.max_links entier Nombre de connexion simultanes maximum, par processus, incluant les connexions persistantes
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 90
5
Le CyberZode Qui Frtille
Prsentation
Loutil phpMyAdmin est dvelopp en PHP et offre une interface intuitive pour ladministration des base de donnes du serveur. Il est tlchargeable ici : http://phpmyadmin.sourceforge.net Cet outil permet de : - crer de nouvelles bases - crer/modifier/supprimer des tables - afficher/ajouter/modifier/supprimer des tupes dans des tables - effectuer des sauvegarde de la structure et/ou des donnes - effectuer nimporte quelle requte - grer les privilges des utilisateurs Les exemples qui vont suivrent sappliquent la version 2.2.6
http://cyberzoide.developpez.com
92
ETAPE 2 : slectionnez le nom de la base manipuler (le nombre de tables de la base apparat entre parenthses)
ETAPE 1 : crivez le nom de la base de donne crer. Puis cliquez sur Crer
http://cyberzoide.developpez.com
93
Choix dune table grer en particulier crire une requte MySQL excuter Actions sur les tables : afficher leur contenu intgral, faire une slection sur critres, ajouter des donnes, grer ses proprit intrinsques, supprimer, vider.
Option permettant de transmettre le schma sous la forme dun fichier Affichage du schma (structure et/ou donnes) des tables slectionnes de la base Accs un formulaire dtaill dajout dune table dans la base Supprimer la base
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 95
Colonnes = noms des attributs de la table Liste des enregistrements de la table par pages de X lignes Permet de naviguer dans les pages de rsultats
Supprimer un enregistrement Accs au formulaire de modification dun enregistrement Insertion dun nouvel enregistrement
Le CyberZode Qui Frtille
Les champs et leurs types sont dfinis lors de la cration de la table : tous les champs sont pas forcment obligatoires Les formulaires dinsertion et de modification sont similaires.
http://cyberzoide.developpez.com
97
Quelques actions sur les attributs : modifier, supprimer ; plus les contraintes : cl primaire et unique ; et y mettre un index
Rordonner les donnes de table en fonction dun attribut Accs au formulaire dinsertion de donnes dans la table partir dun fichier
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 99
Quelques oprations de maintenance : vrification, analyse, rparation, optimisation Lui associer un commentaire Changer le format de la table La supprimer
Le CyberZode Qui Frtille
http://cyberzoide.developpez.com
102
Cration dune cl
On accde cet cran var le lien Crer une clef sur X colonne(s de la page de gestion de la table. Permet de crer une cl sur une ou plusieurs colonnes. Il faut nommer la cl, en spcifier le type, et les attributs sur lesquels elle sapplique. On peut rajouter une autre colonne cette cl avant de valider lajout de la cl.
http://cyberzoide.developpez.com
103
Liens
La rfrence PHP (anglais & franais) : http://www.php.net La rfrence MySQL (anglais) : http://www.mysql.com Le manuel MySQL traduit en franais ici : http://dev.nexen.net/docs/ Des cours et articles intressants : http://www.developpez.com dont la FAQ PHP & MySQL : http://php.developpez.com/faq/ Loutil phpMyAdmin : http://phpmyadmin.sourceforge.net
http://cyberzoide.developpez.com
104
Historique
20 juillet 2003 : insertions compltes et tendues ; jointures (105 diapos) 9 mars 2003 : corrections, aide phpMyAdmin (101 diapos) 17 dcembre 2002 : plus dexemples, api php, jointures (90 diapos) 9 dcembre 2002 : premire publication (73 diapos) 5 dcembre 2002 : cration du document par Hugo Etivant (54 diapos) Remerciement tous ceux qui part leurs suggestions et critiques font progresser la qualit de ce document. Ce cours sinspire des ressources suivantes : " cours de SQL de M. PICHAT (UCBL) " transparents de Mohand-Sad HACID (LISI, UCBL) " manuel MySQL (Nexen) Hugo Etivant cyberzoide@yahoo.fr http://cyberzoide.developpez.com/
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 105