Donc pas de problème de ce coté là.
Pour que PDO émette des messages d'erreurs, tu dois lui préciser via le paramètre PDO::ATTR_ERRMODE.
Pour cela, tu peux le lui transmettre lors de la connexion:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $dsn = 'mysql:host=localhost;dbname=registration;charset=utf8mb4';
$user = 'root';
$password = '';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
];
try {
$dbh = new PDO($dsn, $user, $password, $options);
} catch (PDOException $e) {
echo 'Connexion échouée : ' . $e->getMessage();
} |
Les accents dans les noms de variables et les noms de colonnes de ta base c'est une très mauvaise idée. Utilise le singulier pour les noms de table.
$dbh->exec("INSERT INTO adherants(id,nom,email,description,attribuerà) VALUES('','$nom','$email','$description','$attribuerà')");
Un des intérêts de PDO est justement d'éviter d'écrire ce genre de choses (concaténation de variables provenant de l'extérieur directement dans la requête). C'est un trou de sécurité dans lequel peut s'insinuer une injection SQL, et une source d'ennuis avec des caractères qu'il faut échapper (par exemple si ta description contient un quote). Tu dois utiliser une requête préparée pour solutionner d'un coup ces deux problèmes:
1 2 3 4 5 6 7 8 9 10
| $query = 'INSERT INTO adherent (nom, email, description, attribuer)
VALUES (:nom, :email, :description, :attribuer)';
$stmt = $dbh->prepare($query);
$stmt->execute([
'nom' => $nom,
'email' => $email,
'description' => $description,
'attribuer' => $attribuer
]); |
À noter qu'il n'est pas utile de préciser l'id si celui-ci est en AUTO_INCREMENT.
Partager