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

Résolu
heliconius Messages postés 539 Date d'inscription   Statut Membre Dernière intervention   -  
heliconius Messages postés 539 Date d'inscription   Statut Membre Dernière intervention   -
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Fais un var_dump de la variable e et tu verras ...
1
heliconius Messages postés 539 Date d'inscription   Statut Membre Dernière intervention   142
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 539 Date d'inscription   Statut Membre Dernière intervention   142
 
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