DELIMITER //
CREATE TRIGGER update_niveau_personnage
AFTER UPDATE ON personnage_quete
FOR EACH ROW
BEGIN
IF NEW.date_fin IS NOT NULL THEN
UPDATE personnages
SET niveau = niveau + (SELECT recompense_xp FROM quêtes WHERE id = NEW.quete_id)
WHERE id = NEW.personnage_id;
END IF;
END; //
DELIMITER ;
ex 2
<?php
// Connexion à la base de données
$host = “localhost”;
$dbname = “warcraft”;
$user = “root”;
$password = “”;
$dsn = “mysql:host=$host;dbname=$dbname”;
$pdo = new PDO($dsn, $user, $password);
// Récupérer les identifiants du personnage et de la quête à partir d’un formulaire ou autre source (ici, définis manuellement)
$personnage_id = 1;
$quete_id = 2;
// Requête pour mettre à jour la date_fin de la quête dans la table ‘personnage_quete’
$sql = “UPDATE personnage_quete SET date_fin = NOW() WHERE personnage_id = :personnage_id AND quete_id = :quete_id AND date_fin IS NULL”;
$stmt = $pdo->prepare($sql);
$stmt->bindParam(‘:personnage_id’, $personnage_id, PDO::PARAM_INT);
$stmt->bindParam(‘:quete_id’, $quete_id, PDO::PARAM_INT);
// Exécution de la requête, ce qui déclenchera le trigger pour mettre à jour le niveau du personnage
if ($
ex 3
DELIMITER //
CREATE TRIGGER niveau_up
AFTER UPDATE ON personnages
FOR EACH ROW
BEGIN
IF NEW.experience >= 100 THEN
UPDATE personnages
SET niveau = niveau + 1,
experience = experience – 100
WHERE id = NEW.id;
END IF;
END;
//
DELIMITER ;
<?php
$mysqli = new mysqli(“localhost”, “username”, “password”, “database”);
$sql = “UPDATE personnages SET experience=experience+? WHERE id=?;”;
$stmt = $mysqli->prepare($sql);
$stmt->bind_param(“ii”, $exp_gagne, $personnage_id);
$stmt->execute();
$stmt->close();
$mysqli->close();
?>
ex3
DELIMITER //
CREATE TRIGGER level_check
BEFORE INSERT ON characters
FOR EACH ROW
BEGIN
IF NEW.level < 1 OR NEW.level > 60 THEN
SET NEW.level = 1;
END IF;
END;
//
DELIMITER ;