PHP et MySQL
5e édition
Maîtrisez le développement d'un site web dynamique et interactif
Éditions ENI
Chapitre 1
Introduction
1. Objectifs de l'ouvrage15
2. Bref historique de PHP et MySQL16
2.1 PHP16
2.2 MySQL17
3. Où se procurer PHP et MySQL ?18
4. Conventions d'écriture19
4.1 PHP19
4.2 MySQL20
Chapitre 2
Introduction à MySQL
1. Introduction aux bases de données relationnelles21
1.1 Concepts21
1.2 Principes de conception d'une base de données22
2. Travailler avec MySQL26
2.1 Administration du serveur MySQL26
2.2 Interface en ligne de commande26
2.3 MySQL Workbench29
2.4 phpMyAdmin35
2.5 Fichier de configuration39
3. Installer notre base de données de démonstration40
4. Apprendre les bases du langage SQL48
4.1 Types de données48
4.1.1 Types chaîne de caractères48
4.1.2 Types numériques49
4.1.3 Type booléen50
4.1.4 Types date et heure50
4.1.5 Types pour les données binaires51
4.2 Nom des objets51
4.3 Valeurs littérales53
4.3.1 Chaîne53
4.3.2 Nombre.53
4.3.3 Date, heure, date/heure54
4.3.4 Booléen54
4.4 Expression55
4.5 Valeur NULL55
4.6 Variables55
4.6.1 Variables utilisateurs55
4.6.2 Variables système56
4.7 Commentaires57
5. Exécuter des requêtes SQL simples57
5.1 Le mode SQL du serveur57
5.2 Obtenir des informations60
5.3 Afficher les erreurs et les alertes62
5.4 Lire les données62
5.4.1 Syntaxe de base de l'ordre SELECT62
5.4.2 Restreindre le résultat : clause WHERE67
5.4.3 Trier le résultat : clause ORDER BY73
5.4.4 Limiter le nombre de lignes : clause LIMIT75
5.4.5 Lire dans plusieurs tables : jointure76
5.5 Ajouter des lignes dans une table82
5.6 Modifier des lignes dans une table89
5.7 Supprimer des lignes dans une table94
5.8 Exporter et importer des données97
5.8.1 Sécurité des opérations d'export ou d'import97
5.8.2 Exporter des données97
5.8.3 Importer des données100
1. Introduction103
2. Fonctions de contrôle104
3. Fonctions de comparaison108
4. Fonctions numériques110
5. Fonctions caractères114
6. Fonctions dates123
7. Fonctions de transtypage et de mise en forme132
8. Fonctions système137
9. Fonctions de chiffrement et de compression141
10. Fonctions d'agrégat145
Chapitre 4
Construire une base de données dans MySQL
1. Créer et supprimer une base de données149
2. Gérer les utilisateurs et les droits150
2.1 Vue d'ensemble150
2.2 Gérer les utilisateurs152
2.2.1 Créer des utilisateurs152
2.2.2 Supprimer des utilisateurs155
2.2.3 Modifier le mot de passe des utilisateurs155
2.3 Gérer les droits des utilisateurs156
2.3.1 Attribuer des droits aux utilisateurs156
2.3.2 Lister les droits d'un utilisateur161
2.3.3 Révoquer des droits d'un utilisateur161
2.4 Utiliser les rôles162
2.4.1 Définition162
2.4.2 Créer un rôle163
2.4.3 Attribuer des droits à un rôle163
2.4.4 Révoquer des droits d'un rôle164
2.4.5 Attribuer un rôle à un utilisateur ou à un rôle164
2.4.6 Activer les rôles165
2.4.7 Révoquer un rôle d'un utilisateur ou d'un rôle168
2.4.8 Supprimer un rôle168
3. Gérer les tables168
3.1 Créer une table168
3.2 Créer une table par copie175
3.3 Renommer une table177
3.4 Modifier la structure d'une table178
3.5 Supprimer une table182
4. Utiliser les contraintes et les index182
4.1 Clé primaire ou unique182
4.1.1 Définition182
4.1.2 Gestion183
4.2 Index186
4.2.1 Définition186
4.2.2 Gestion186
4.2.3 Considérations188
4.3 Clé étrangère189
4.3.1 Définition189
4.3.2 Gestion190
4.4 Contrainte CHECK.193
4.4.1 Définition193
4.4.2 Gestion193
5. Utiliser des vues195
5.1 Définition195
5.2 Gestion195
6. Obtenir des informations sur les bases de données198
6.1 La commande SHOW198
6.2 La base de données INFORMATION_SCHEMA199
7. Exporter et importer une base de données201
1. Grouper les données205
2. Utiliser des sous-requêtes211
2.1 Introduction211
2.2 Sous-requête scalaire211
2.3 Comparaison avec une sous-requête213
2.4 Sous-requête corrélée216
2.5 Sous-requête dans la clause FROM219
2.6 Insérer des lignes à l'aide d'une sous-requête220
2.7 Clause WITH221
3. Utiliser les fonctions de fenêtrage223
3.1 Introduction223
3.2 Fonctions de classement225
3.3 Partitionnement232
3.4 Fonctions d'agrégat235
3.5 Fenêtres glissantes237
3.6 Accès à d'autres lignes que la ligne courante245
4. Réunir le résultat de plusieurs requêtes248
5. Gérer les transactions et les accès concurrents250
5.1 Définition250
5.2 Gérer les transactions250
5.3 Annuler une partie d'une transaction253
5.4 Concurrence d'accès et verrouillage255
5.4.1 Concurrence d'accès255
5.4.2 Verrouiller des tables260
5.4.3 Verrou mortel261
6. Effectuer des recherches à l'aide des expressions rationnelles261
7. Effectuer des recherches en texte intégral267
7.1 Principes267
7.2 Création de l'index FULLTEXT267
7.3 Effectuer une recherche en texte intégral268
7.3.1 Recherche classique268
7.3.2 Recherche en mode booléen271
7.3.3 Recherche avec extension de requête272
7.4 Réglage de la recherche en texte intégral273
8. Développer des programmes stockés274
8.1 Introduction274
8.2 Gestion des droits275
8.3 Gestion des programmes stockés275
8.4 Exécuter un programme stocké280
8.5 Structure du langage281
8.5.1 Bloc BEGIN END281
8.5.2 Les variables282
8.5.3 Intégration d'ordres SQL283
8.5.4 Les structures de contrôle284
8.5.5 La gestion des erreurs289
8.5.6 Les curseurs299
8.5.7 Récursivité302
9. Développer des triggers302
9.1 Définition302
9.2 Gestion des triggers303
9.3 Considérations sur l'utilisation des triggers306
9.3.1 Restrictions306
9.3.2 Résultat en cas d'erreur306
Chapitre 6
Introduction à PHP
1. Qu'est-ce que PHP ?309
2. Structure de base d'une page PHP311
2.1 Les balises PHP311
2.2 La fonction echo311
2.3 Séparateur d'instructions313
2.4 Commentaires313
2.5 Mixer du PHP et du HTML314
2.6 Règles de nommage317
3. Configuration de PHP317
3.1 Le fichier de configuration php.ini317
3.2 Informations sur la configuration318
3.3 Jeu de caractères321
4. Les bases du langage PHP321
4.1 Constantes321
4.1.1 Définition321
4.1.2 Portée324
4.2 Variables324
4.2.1 Initialisation et affectation324
4.2.2 Portée et durée de vie326
4.2.3 Variable dynamique (ou variable variable)327
4.3 Types de données327
4.3.1 Types de données disponibles327
4.3.2 Types de données scalaires328
4.3.3 Types de données spéciaux335
4.3.4 Déclaration de type336
4.4 Tableaux338
4.4.1 Définition338
4.4.2 Création340
4.4.3 Manipulation345
4.5 Opérateurs352
4.5.1 L'opérateur d'affectation par valeur352
4.5.2 L'opérateur d'affectation par référence354
4.5.3 Les opérateurs arithmétiques355
4.5.4 L'opérateur de chaîne355
4.5.5 Les opérateurs combinés356
4.5.6 Les opérateurs de comparaison356
4.5.7 Les opérateurs logiques358
4.5.8 L'opérateur ternaire358
4.5.9 L'opérateur de fusion NULL359
4.5.10 L'opérateur d'affectation de fusion NULL360
4.5.11 L'opérateur de comparaison combinée361
4.5.12 Précédence des opérateurs362
4.6 Structures de contrôle363
4.6.1 La structure if363
4.6.2 La structure switch365
4.6.3 La structure while368
4.6.4 La structure do ... while370
4.6.5 La structure for371
4.6.6 Les instructions continue et break372
4.6.7 L'expression match373
4.7 Inclure un fichier376
4.7.1 Fonctionnement376
4.7.2 Utilisation378
4.8 Interrompre le script379
Chapitre 7
Utiliser les fonctions PHP
1. Préambule381
2. Manipuler les constantes, les variables et les types de données382
2.1 Constantes382
2.2 Variables383
2.3 Types de données389
2.3.1 Conversions389
2.3.2 Fonctions utiles393
3. Manipuler les tableaux399
4. Manipuler les nombres411
5. Manipuler les chaînes de caractères417
6. Utiliser les expressions rationnelles435
6.1 Introduction435
6.2 Structure d'une expression rationnelle435
6.3 Fonctions445
7. Manipuler les dates449
8. Générer un identifiant unique462
9. Manipuler les fichiers sur le serveur463
9.1 Fonctions utiles463
9.2 Exemple d'utilisation470
10. Envoyer un courrier électronique471
10.1 Vue d'ensemble471
10.2 Envoyer un message texte sans pièce jointe471
10.3 Envoyer un message au format MIME474
10.3.1 Préambule474
10.3.2 Message au format HTML474
10.3.3 Message avec pièce jointe477
Chapitre 8
Écrire des fonctions et des classes PHP
1. Fonctions483
1.1 Introduction483
1.2 Déclaration et appel483
1.3 Paramètres493
1.3.1 Syntaxe493
1.3.2 Valeur par défaut494
1.3.3 Déclaration du type de données496
1.3.4 Passage par référence500
1.3.5 Liste variable de paramètres501
1.3.6 Utilisation du nom du paramètre dans l'appel503
1.4 Considérations sur les variables utilisées dans les fonctions506
1.4.1 Variable locale - globale506
1.4.2 Variable statique508
1.5 Les constantes et les fonctions510
1.6 Récursivité510
1.7 Fonction anonyme512
1.8 Fonction fléchée514
1.9 Fonction générateur515
2. Classes518
2.1 Concept518
2.2 Définir une classe518
2.3 Instancier une classe524
2.4 Héritage527
2.5 Autres fonctionnalités sur les classes531
2.5.1 Classe ou méthode abstraite531
2.5.2 Classe ou méthode finale533
2.5.3 Interface533
2.5.4 Propriété ou méthode statique - Constante de classe535
2.5.5 Traits538
2.6 Classe anonyme541
2.7 Exceptions542
2.8 Énumérations546
3. Espaces de noms551
Chapitre 9
Gérer les erreurs dans un script PHP
1. Vue d'ensemble557
2. Les messages d'erreur PHP558
3. Les fonctions de gestion des erreurs562
Chapitre 10
Gérer les formulaires et les liens avec PHP
1. Vue d'ensemble579
1.1 Introduction579
1.2 Les liens579
1.3 Les formulaires582
1.3.1 Petit rappel sur les formulaires582
1.3.2 Construire un formulaire dynamiquement584
1.3.3 Traiter un formulaire à l'aide d'un script PHP589
1.4 Récupérer les données d'une URL ou d'un formulaire593
2. Récupérer les données passées par l'URL596
2.1 Considérations596
2.1.1 Que se passe-t-il si deux paramètres portent le même nom ?596
2.1.2 Utiliser un tableau pour passer des données dans l'URL596
2.2 Transmettre des caractères spéciaux597
3. Récupérer les données saisies dans le formulaire600
3.1 Considérations600
3.1.1 Que se passe-t-il si deux zones portent le même nom ?600
3.1.2 Que se passe-t-il s'il y a deux formulaires dans la page HTML ?600
3.1.3 Utiliser un tableau pour récupérer les données saisies601
3.1.4 Passer des informations dans une zone de formulaire cachée602
3.2 Les différents types de zone604
3.2.1 Vue d'ensemble604
3.2.2 Zone contenant du texte606
3.2.3 Groupe de boutons radio607
3.2.4 Case à cocher607
3.2.5 Liste à sélection unique610
3.2.6 Liste à sélection multiple611
3.2.7 Bouton de validation612
3.2.8 Bouton image614
3.2.9 Bouton « reset » ou « button »615
3.3 Synthèse615
4. Contrôler les données récupérées617
4.1 Vue d'ensemble617
4.2 Vérifications classiques618
4.2.1 Nettoyage des espaces superflus618
4.2.2 Donnée obligatoire618
4.2.3 Longueur maximum d'une chaîne618
4.2.4 Caractères autorisés pour une chaîne - Format619
4.2.5 Validité d'une date - Plage de valeurs619
4.2.6 Validité d'un nombre - Plage de valeurs621
4.2.7 Validité d'une adresse e-mail622
5. Problèmes sur les données récupérées623
6. Utilisation des filtres630
6.1 Principes630
6.2 Application aux formulaires639
7. Aller sur une autre page640
8. Échanger un fichier entre le client et le serveur647
8.1 Vue d'ensemble647
8.2 Envoyer un fichier depuis le client (upload)647
8.3 Télécharger un fichier à partir du serveur (download)652
Chapitre 11
Accéder à une base de données MySQL
1. Introduction659
1.1 Vue d'ensemble659
1.2 Quelle extension utiliser pour accéder à MySQL ?660
1.3 La notion de fetch660
2. Utilisation de l'extension MySQLi661
2.1 Introduction661
2.2 Connexion et déconnexion662
2.2.1 Connexion662
2.2.2 Déconnexion663
2.2.3 Obtenir des informations sur le serveur MySQL664
2.2.4 Définir le jeu de caractères du client664
2.2.5 Obtenir des informations en cas d'erreur de connexion664
2.2.6 Mode de rapport d'erreur665
2.2.7 Exemple665
2.3 Sélectionner une base de données667
2.4 Utiliser des requêtes non préparées668
2.4.1 Vue d'ensemble668
2.4.2 Exécuter une requête668
2.4.3 Connaître le nombre de lignes dans le résultat d'une requête de lecture670
2.4.4 Extraire le résultat d'une requête de lecture671
2.4.5 Obtenir des informations sur le résultat d'une requête de mise à jour676
2.4.6 Gérer les erreurs678
2.5 Utiliser des requêtes préparées680
2.5.1 Vue d'ensemble680
2.5.2 Préparer une requête682
2.5.3 Lier des variables PHP aux paramètres de la requête682
2.5.4 Exécuter la requête préparée684
2.5.5 Lier des variables PHP aux colonnes du résultat d'une requête de lecture686
2.5.6 Extraire le résultat d'une requête de lecture688
2.5.7 Utiliser un résultat stocké689
2.5.8 Obtenir des informations sur le résultat d'une requête de mise à jour692
2.5.9 Gérer les erreurs694
2.5.10 Fermer une requête préparée695
2.6 Gérer les transactions696
2.7 Appeler un programme stocké698
2.7.1 Procédure stockée698
2.7.2 Fonction stockée702
2.8 Utiliser les types de données BLOB704
2.8.1 Insertion ou modification704
2.8.2 Lecture706
3. PHP Data Objects (PDO)709
4. Gestion des apostrophes dans le texte des requêtes711
5. Exemples d'intégration dans des formulaires715
5.1 Vue d'ensemble715
5.2 Formulaire de saisie en liste715
5.3 Formulaire de recherche720
5.4 Formulaire de saisie724
Chapitre 12
Gérer les sessions
1. Description du problème733
2. Authentification734
2.1 Vue d'ensemble734
2.2 Saisie de l'identification734
2.2.1 Identification par formulaire734
2.2.2 Identification par authentification HTTP737
2.3 Vérifier l'identification saisie739
3. Utiliser des cookies740
3.1 Principe740
3.2 Application à la gestion des sessions747
4. Utiliser la gestion des sessions de PHP747
4.1 Principes747
4.2 Mise en ouvre748
4.3 Gérer soi-même la transmission de l'identifiant de session762
4.3.1 Description du problème762
4.3.2 Solution765
4.4 Quelques directives de configuration supplémentaires768
4.5 Exemple d'application769
4.6 Remarque et conclusion772
5. Conserver des informations d'une visite à une autre776
6. Petite synthèse sur les variables GPCS (Get/Post/Cookie/Session)781
Annexes
1. Variables PHP prédéfinies785
2. Constantes PHP prédéfinies787
3. Exemples complémentaires788
3.1 Introduction788
3.2 Lire un document XML789
3.3 Générer un document PDF793
3.4 Générer une image798
4. Résumé des principales nouveautés des versions 8 et 8.1804
Index809