Jérôme Le Naou
SGBD
data 1
data 2
data 3
.....
Fichiers plats
MySQL / MariaDB
PostgreSQL
Oracle
Serveur
Base
Table
mysql.serveur.com
Base MonBuilder
Joueurs
ModelesBatiments
Batiments
Quêtes
Colonnes
Lignes
SELECT * FROM Batiments WHERE joueur_id=5
INSERT INTO Joueurs (Login,Email,Password) VALUES
("Jérôme", "j.lenaou@gmail.com", "gdp32016")
UPDATE Quetes SET Achevee="true" WHERE ID=5
DELETE FROM Unites
SELECT <champs> FROM <table>
[WHERE <condition>]
[ORDER BY <expressions> [ASC|DESC]]
[LIMIT lignes]
UPDATE <table>
SET <champ>=<expression> [,<champ2>=<exp2>, ...]
WHERE <condition>
/!\ Ne JAMAIS oublier le WHERE /!\
DELETE FROM <table>
WHERE <condition>
/!\ Ne JAMAIS oublier le WHERE /!\
INSERT INTO <table> (<colonnes>)
VALUES (<expressions>)
SELECT Niveau + 1 FROM Joueurs WHERE ID=5
SELECT MIN(Niveau) as NiveauMin FROM JoueurLevels WHERE Experience > 1000
SELECT MAX(Niveau) as NiveauMax FROM JoueurLevels
SELECT (Nom + ' ' + Prenom) as NomComplet FROM Utilisateurs
SELECT CONCAT(Nom, ' ', Prenom) as NomComplet FROM Utilisateurs
SELECT LENGTH(Prenom) FROM Utilisateurs
SELECT * FROM Utilisateurs WHERE Prenom LIKE 'John'
SELECT * FROM Utilisateurs WHERE Prenom LIKE 'J%'
SELECT * FROM Utilisateurs WHERE Prenom LIKE '%n'
SELECT * FROM Utilisateurs WHERE Prenom LIKE '%h%'
SELECT LOWER(Prenom) FROM Utilisateurs
SELECT UPPER(Prenom) FROM Utilisateurs
SELECT SUBSTR(Prenom, 4, 2) FROM Utilisateurs
SELECT REVERSE(Prenom) FROM Utilisateurs
SELECT REPLACE(Prenom, 'John', 'Marc') FROM Utilisateurs
SELECT TRIM(' Bob ') FROM Utilisateurs => Bob
SELECT TRIM(BOTH 'x' FROM 'xxxBobxxx') FROM Utilisateurs => Bob
SELECT TRIM(LEADING 'x' FROM 'xxxBobxxx') FROM Utilisateurs => Bobxxx
SELECT TRIM(TRAILING 'x' FROM 'xxxBobxxx') FROM Utilisateurs => xxxBob
SELECT *, ADDDATE(Anniversaire, 10) FROM Utilisateurs
SELECT *, ADDDATE(Anniversaire, INTERVAL 1 YEAR) FROM Utilisateurs
SELECT *, SUBDATE(Anniversaire, INTERVAL 1 MONTH) FROM Utilisateurs
SELECT *, ADDTIME(Anniversaire, '1:0:0') FROM Utilisateurs
SELECT *, SUBTIME(Anniversaire, '2:0:0') FROM Utilisateurs
SELECT * FROM Utilisateurs WHERE Anniversaire < SUBDATE('02-01-2017 10:00:00', INTERVAL 20 YEAR)
SELECT *, DATE_FORMAT(Anniversaire, '%W %d %M %Y') FROM Utilisateurs
SELECT * FROM Utilisateurs WHERE YEAR(Anniversaire) > 1987
SELECT COUNT(*), YEAR(Anniversaire) FROM Utilisateurs GROUP BY YEAR(Anniversaire)
Exemple de syntaxe pour les DATETIME :
3 types de clefs :
Index key :
Unique key :
Primary key
Foreign Key
SELECT * FROM Utilisateurs
SELECT * FROM Competences
3 colonnes
6 lignes
4 colonnes
5 lignes
SELECT * FROM Utilisateurs AS u,
Competences AS c
7 colonnes
30 lignes
SELECT * FROM Utilisateurs
JOIN Competences
SELECT * FROM Utilisateurs
INNER JOIN Competences
7 colonnes
30 lignes
SELECT * FROM Utilisateurs
JOIN Competences
ON Competences.UserID = Utilisateurs.ID
7 colonnes
4 lignes
SELECT * FROM Utilisateurs
LEFT JOIN Competences
ON Competences.UserID = Utilisateurs.ID
SELECT * FROM Utilisateurs
RIGHT JOIN Competences
ON Competences.UserID = Utilisateurs.ID
INNER JOIN
LEFT JOIN
SELECT * FROM post AS P
LEFT JOIN post_tags AS PT ON P.ID = PT.post_id
LEFT JOIN tags AS T ON T.ID = PT.tags_id
WHERE P.ID = 1
// index.php
<?php
$CONFIG = require("config.php");
try {
$dbh = new PDO($config["dbType"] . ":host=".$config["host"].";dbname=".$config["dbname"],
$config["user"],
$config["password"]
);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// some queries
}
catch (PDOException $e) {
error_log('PDO Exception: '.$e->getMessage());
die('PDO says no.');
}
// config.php
<?php
return [
"host" => "localhost",
"dbname" => "GDP3_RPG",
"user" => "root",
"password" => "root",
"dbType" => "mysql"
];
<?php
// .....
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$queryString = "SELECT * FROM Utilsateurs";
$request = $db->query($queryString);
$retour = $req->fetchAll();
foreach($retour as $data) {
// Do some stuff
}
<?php
// .....
$queryString = "UPDATE Utilisateurs SET Login=:login";
$request = $db->prepare($queryString);
$request->execute([
"login" => "john"
]);
if($request->rowCount() == 0) {
die("user not found. No update");
}
else {
// Do some stuff
}
<?php
// .....
$offset = 5;
$queryString = "SELECT * FROM Utilisateurs LIMIT 0, :limit";
$requete = $db->prepare($queryString);
$requete->execute([
"limit" => $offset
]);
/*
!!! ERREUR !!!
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''5'' at line 1
*/
$queryString = "SELECT * FROM Utilisateurs LIMIT 0, 5";
$requete = $db->prepare($queryString);
$requete->execute();
// OK
<?php
// .....
$offset = 5;
$queryString = "SELECT * FROM Utilisateurs LIMIT 0, :limit";
$requete = $db->prepare($queryString);
$requete->bindValue("limit", 5, PDO::PARAM_INT);
$requete->execute();
// OK
Un rpg web
Inscription / connexion
Chaque joueur peut créer un personnage
Le joueur peut affronter des monstres aléatoires
Le joueur a des compétences qu'il peut utiliser en combat
Le joueur peut monter de niveau
5 tables obligatoire (vous pouvez en faire plus) :
Table des joueurs Player
Définir l'état du joueur (login, password, hp restants etc...)
Table des monstres Monster
Defini un modèle de monstre (attaque, défense, hp...)
Table des compétences Skill
La liste des skills disponible, à quel niveau etc...
Table des levels Level
Liste des niveaux du joueur (xp requis etc...). Vous pouvez créer un algorithme de calcul à la place
Table historique History (sauvegarde de tous les
événements du jeu aka resultat de combat, montée niveau...)
Pas de css ou de js. Du PHP pur
3 pages php :
index.php, je veux pouvoir :
me logger / m'enregister
village.php, je veux pouvoir :
Voir un récap du personnage du joueur
Avoir la possibilité d'aller attaquer un monstre
battle.php, je veux pouvoir :
Sélectionner un skill qui va être lancé pendant le combat
Lancer le combat contre un monstre
Voir le récap du combat et revenir au village
Vous avez le sujet par email !!!
Pas de limite de temps (pour l'instant ) mais passez pas plus d'une heure
Exercez vous, faites un truc fun !
Je n'ai pas tout mis dans l'énoncer, du coup réfléchissez un peu à la conception de votre base de données !