Tutorial PHP/MySQL
Root Home CV Actualités Liens servlets Développement Divers

Tutorial MySQL/PHP

Liens :

MySQL
-MySQL Manual
-Optimizing MySQL
-Chapitre du manuel sur l'optimisation de MySQL
-phpMyAdmin

PHP
PHPEd, un IDE pour PHP (sous Windows)
PHP Manual
phpfrance.com
phpindex.com
What's new in PHP4?
 

SQL
Tutorial SQL

Divers
PHPAccelerator, de IonCube (voir PHPEncoder aussi)
EasyPHP (package Apache + PHP + MySQL, etc.)
 
 

Commentaires, ajouts nécéssaires, etc.

Contenu de ce tutorial :

1 Base de données relationnelles
2 SQL
3 MySQL
4 HTML
5 PHP
6 Interfaçage PHP/MySQL

1 Base de données relationnelle


Dans une base de données relationnelle, les données sont stockés dans des tables. Une table définit une série de champs, destinés à décrire les objets stockés. Par exemple, si l'on souhaite stocker des joueurs, on pourra décrire ces joueurs par leur nom, leur profession, leur age, etc. Dans une table relationnelle, chaque colonne correspond à un champs (ou attribut), et chaque ligne à un objet stocké.
Conceptuellement parlant, stocker un nouvel objet dans une table consistera donc à créer une nouvelle ligne dans une table, et à remplir chacune des cases de cette ligne correspondant aux attributs du nouvel objet.

Exemple de table :
 
Joueurs
id prenom nom profession ville etat
1 Joe Smith  83 First Street Howard Ohio 
2 Mary Scott  842 Vine Ave. Losantiville Ohio 
3 Sam Jones  33 Elm St. Paris New York 
4 Sarah Ackerman  44, Main St. Upton Michigan 

La création, le peuplement, l'interrogation d'une base relationnelle (et donc de ses tables) se font au moyen d'un langage nommé SQL (Structured Query Language).

2 SQL


2.1 Les principaux types de données en SQL:

NUMERIQUES
int                 entiers                            5
float              réél (flottant)                5.0
decimal        valeurs monétaires
...

TEXTES
char             chaîne de taille fixe
varchar        chaîne de taille variable
text              chaîne de longueur élevée.

DATE/HEURES
date               "1998-12-31"
datetime         "1998-12-31 23:59:59"
timestamp      19981231235959

AUTRES
enum              choix unique parmi un ensemble de valeurs : enum("rouge", "bleu")
set                  choix multiples
blob                Binary Large OBjects

2.1 Créer des tables en SQL

mysql> CREATE TABLE players (id int auto_increment, varchar(20), ...);

Il est conseillé de créer des index associés aux champs d'un table impliqués dans des requètes, de facon à accélerer ces requètes. Exemple:

create table players (
player_id int not null auto_increment,
player_nom varchar(20),
player_prenom varchar(20),
primary key(player_id)  //clé primaire pour identifiant
unique et index
);

2.2 Créer un index (accélération de requètes)
mysql> CREATE INDEX idx ON players (profession);

2. 3 Insertion de données
mysql> INSERT INTO players VALUES (null, "olly", "olly", ..);
mysql> INSERT INTO connections VALUES (null, "olly", "1998-12-31 23:59:59", ...);

Pour insérer des données à partir d'un fichier CSV (données séparées par des ";" ou des tabulations) :
mysql> LOAD DATA LOCAL INFILE "text.txt" INTO TABLE players;

2.4 Interrogation d'une table
mysql> SELECT * FROM players;                //récupère tous les joueurs
mysql> SELECT profession, age FROM players WHERE ville = "Toulouse";
mysql> SELECT profession FROM players WHERE email LIKE "%@club-internet.fr";
mysql> SELECT count(*) FROM players;     //récupère le nombre de joueurs
mysql> SELECT * FROM players ORDER BY age; //récupère tous les joeurs classés par age
mysql> SELECT * FROM players GROUP BY profession;
mysql> SELECT * FROM players ORDER BY age DESC LIMIT 10; //10 premier joueurs les plus agés
Il est également possible de faire intervenir des opérateurs logiques (AND, OR, NOT).

2.5 Mise à jour d'un champs
mysql> UPDATE players SET nb_connections = nb_connections + 1;

2.6 Modification d'une table
mysql> ALTER TABLE players ADD COLUMN profession varchar(50); //ajoute une colonne
mysql> ALTER TABLE players DROP COLUMN age; // enleve une colonne

2.7 Destruction d'une ligne dans une table
mysql> DELETE FROM players WHERE age < 5;

2. 8 Destruction de table
mysql> DROP TABLE IF EXISTS players;

2.9 Destruction d'une base
mysql> DROP TABLE IF EXISTS game;
 
 

Ressources:

  • Les jointures de tables, devshed.com, explique notamment pourquoi les "left joins" sont extrèmement conseillés.

3 MySQL

3.1 Principaux fichiers

Sous Windows, les fichiers éxécutables fournis avec MySQL sont les suivants:
 
 
mysqld serveur MySQL. Sous Windows, on tapera simplement mysqld pour le lancer. Sous Unix, le script safe_mysqld se charge de démarrer mysqld avec les options classiques.
mysql Le client standard MySQL, permettant de lancer des requètes SQL, et des commandes propres à MySQL.
Pour lancer le client :
mysql --user=user --password=passwd --host=hostname base
mysqladmin administration rapide d'une base (création de base, shutdown)
mysqldump permet de réaliser un dump d'une base, c'est à dire générer l'ensemble des commandes SQL qui pourraient permettre de recréer cette base sous un autre nom ou sur un autre serveur
mysqlimport import d'une base de donnée
mysqlshutdown.exe  shutdown
MySqlManager.exe client graphique

3.2 Commandes propres à MySQL :

Pour afficher toutes les bases de données sur un serveur MySQL :
mysql>  show databases;


Pour afficher toutes les tables de la base de données courante :

mysql>  show tables;


Pour afficher de toutes les champs d'une table (players par exemple) :

mysql> show columns from players;
ou bien :
mysql>describe players


3.3 Trucs

Faire une union de tables avec MySQL:
 

mysql> create temporary table temp ( ... );
mysql> insert into temp select blabla from table_name where ... ;
mysql> insert into temp select blabla from table_name where ... ;
mysql> select * from temp;
mysql> delete temp;
Il peut etre judicieux de creer une cle primaire pour la table temporaire, pour accelerer l'union.

3.4 Privilèges


Changer le password root :

use mysql;
update user set password = password("xxxxx") where user = "root"
flush privileges
 

 

C:\>mysql --user=root mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
           IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"
           IDENTIFIED BY 'something' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql> GRANT USAGE ON *.* TO dummy@localhost;
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
           ON bankaccount.*
           TO custom@localhost
           IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
           ON expenses.*
           TO custom@whitehouse.gov
           IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
           ON customer.*
           TO custom@'%'
           IDENTIFIED BY 'stupid';
 

 

4 HTML

4.1 tables

- Eléments de base d'une page HTML
<table>
  <tr>
   <td>une case</td> <td>une autre case</td>
  </tr>
  <tr>
   <td>encore une case</td><td>une dernière case</td>
  </tr>
</table>

- Possibilité d'imbriquer les tables les unes dans les autres
 

4.2 formulaires


Structure générale :
<form action="vote.php3" method="get">
...
texte, tables, etc...
<input ...>
...
<
</form>
 

Différents éléments d'entrée de données :
champs caché     <input type="hidden" name="page" value="cv.html">
champs de saisie <input type="text" name="telephone" size="10" maxlength="10">
zone de texte      <textarea name="adresse" cols="40" rows="2" wrap="virtual"></textarea>
bouton radio       <input type="radio" name="notoriete" value="magazine" checked="true">
liste de sélection  <select>
                              <option value="janvier">Janvier</option>
                              <option value="fevrier">Février</option>
                              <option value="mars" selected="true">Mars</option>
                           </select>
submission          <input type=submit value="Validez" name="submit">
 
 

5 PHP

 

 
 
 
 
 
 
 
 
 

5.1 Syntaxe générale
La syntaxe du PHP est proche de celle du C et du perl. Un des gros interêt du PHP est qu'il est possible dans une même page de mélanger instructions PHP et HTML
Par exemple :

<html><body>

<h1>html</h1>

<?php echo "<b>php</b>\n"; ?>

</body></html>

Types de données et variables
- Pas de déclarations de variables requis, le type d'une variable est donné par son utilisation.
- Une variable commence par le signe $
- numériques ($a=1), chaînes de caractères ($a="hello"), tableaux ($a[1]="rouge"), tableaux associatifs($a["voiture"]="rouge")
 

Expressions conditionnelles et boucles
- boucles while, for
- test if, switch

Fonctions de base
Affichage d'une chaîne de caractères.
echo("Hello\n"); ou echo "Hello\n";

Fonctions
function maFonction($param1, $param2)
{
    return $param1 * $param2;
}

Il est possible de faire des bibliothèques de fonctions, de les stocker dans des fichiers à inclure :
Ex:
include("fichier.inc.php3");

Gestion des chaines de caracteres

  • split
Ex : manipulation de dates.
list($annee, $mois, $jour) = split("/", $date); si date au format $date="2000/5/9";
ensuite
$nouv_date = "$jour:$mois:$annee"; par exemple pour avoir une date $nouv_date = "9:5:2000";
 

Gestion des sessions : cookies (PHP3) ou intégré (PHP4)
- Envoi d'un cookie nommé TestCookie avec la valeur $value, expirant dans une heure
SetCookie("TestCookie",$value,time()+3600);

- Réception d'un cookie
Une variable nommée $TestCookie est automatiquement créée lorsqu'une requète HTTP comporte le cookie precedent dans son header

Redirection
Header("Location: http://xxx.xxx.com") par exemple.
 

Expression régulières
Les expressions régulières représentent un excellent outil pour tester la validité de certaines chaines de caractères (code postaux, numéros de téléphone). Par exemple :

Comment tester si un code postal est valide?

if (preg_match("/^\d{5}$/", $code))

    print "Le code $code est valide";

else

    print "Le code $code est invalide";

Comment tester si un numéro de portable est valide?
if (preg_match("/^\06d{8}$/", $num))

    print "Le numéro $num est valide";

else

    print "Le numéro $num est invalide";

Gestion de formulaires HTML

Exemple de formulaire :
<form action="vote.php3" method="get">
<input type="text" name="telephone" size="10" maxlength="10">
<input type=submit value="Validez" name="submit">
</form>
Lors de l'éxécution (côté serveur) du script PHP vote.php3, une variable $telephone est automatiquement créée et le contenu saisi dans le formulaire est stocké dans cette variable.

Ex  de script vote.php3 :

<?php
Header("Content-type: text/html");
echo "<html><body>\n"
echo "Votre numéro est le $telephone\n";
echo "</body></html>\n";
?>

Ressources sur le web :
manuel PHP à http://www.php.net
http://www.phpbuilder.com
 

6 Interfaçage MySQL/PHP


Fonctions mysql de PHP :
- mysql_connect(hote, user, passwd) connection à une base MySQL, renvoie un id positif si OK
- mysql_db_query(base, requète) envoie une requète à la base, renvoie un id de resultat (positif si OK)
- mysql_fetch_array(id) renvoie un tableau associatif (false sinon)
- mysql_close() fermeture de la connection
- mysql_insert_id() renvoie la valeur du champs auto_increment de la dernière insertion
- list($var1, $var2, ...) = mysql_fetch_array(id)

Exemple minimal :

<?php

$host = "localhost";
$user = "olly";
$password = "";
$database = "test";

$conn = mysql_connect($host,$user,$password);
if (!$conn) {
    echo "Connection impossible\n";
    exit;
}

$result = mysql_db_query("database","select * from players;");
if ($result > 0) {
    while($row = mysql_fetch_array($result)) {
        echo $row["nom"] . $row["prenom"] . "\n";
}
mysql_close();
?>
 
 
 

Ressources

  • Réseaux, Bases de données partagées, PHP, PostgreSQL 
  • Binary Data + MySQL + PHP : How to store images directly in the sql database