Récupérer le numéro d'erreur MySQL avec PHP

Résolu/Fermé
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 16 juin 2022 à 15:22
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 17 juin 2022 à 01:10
Bonjour,

j'étais jusqu'ici en PHP/MySQL (driver mysql) et je passe sous driver PDO. (mysql tombe petit à petit en désuétude)

En cas de tentative de double saisie d'un même enregistrement, le code erreur avec le driver mysql (mais je suppose que c'est le même avec PDO puisque c'est MySQL qui fournit le numéro d'erreur) était le code 1062.

Avec mysql, je créais le compte-rendu d'exécution ($cr). J'aimerai faire la même chose avec PDO mais je n'y arrive pas. Le code, tel qu'il est marqué ci-dessous s'exécute mais :
-- si la saisie a pu être enregistrée, j'ai le message d'enregistrement
-- si la saisie est déjà faite, elle n'est pas re-enregistrée mais je n'ai aucun compte-rendu de double saisie affiché.

$requete = "INSERT INTO hdj_Pas VALUES ('...', $iduser, ..., '...');";
try {
	$resultat = $cnx->query($requete); }
catch (PDOException $e) {
	switch($e) {
		case 1062: $cr = "La saisie du ".trim($_POST["date"])." a déjà été faite."; break;
		default  : $cr = "Saisie effectuée pour le : $_POST["date"].; break;
	}
}

Quelqu'un voit-il mon erreur ?
Merci pour vos réponses.


Configuration: Windows / Firefox 101.0
A voir également:

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
16 juin 2022 à 15:32
Fais un var_dump de la variable e et tu verras ...
1
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
16 juin 2022 à 22:40
Bonsoir,

J'ai fini par trouver ce que je voulais sans passer par les exceptions et les ATTR_ERRMODE et ses différentes valeurs qui rendent les choses obscures (tout au moins pour moi) :
$requete  = "INSERT INTO hdj_Pas VALUES ('...', $iduser, ..., '...');";
$resultat = $cnx->query($requete);
switch($cnx->errorCode()) {
	case 23000: $cr = "C'était déjà enregstré.";  break;
	default   : $cr = "Enregistrement effectué."; break;
}
...
echo "$cr\n";


Merci. A plus tard...
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
16 juin 2022 à 22:48
Au cas où tu aurais voulu la réponse avec les exceptions

try {
  // ...
} catch (PDOException $e) {
  switch ($e->errorInfo[1]) {
  case 1062:
    error_log('Violating unique key constraint: ' . $e->errorInfo[2]);
  case 1644:
    // for mysql this is the same as matching on getCode() or errorInfo[0] using '45000'
    error_log('User Defined Error!: ' . $e->errorInfo[2]);
  default:
    throw $e;
  }
}

1
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
17 juin 2022 à 01:10
Merci. Mais je dois dire que les Exceptions sont encore un peu obscures pour moi. J'ai un peu de mal avec cette logique. Pour l'instant j'ai trouvé ce qui correspond à mon besoin immédiat mais il va falloir que je me plonge dans ces Exeptions avec un bon bouquin car ça me paraît incontournable.
Bonne soirée.
0