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 -
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é.
Quelqu'un voit-il mon erreur ?
Merci pour vos réponses.
Configuration: Windows / Firefox 101.0
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:
- Récupérer le numéro d'erreur MySQL avec PHP
- Numero prive - Guide
- Numéro père noël whatsapp - Accueil - Messagerie instantanée
- Recuperer message whatsapp supprimé - Guide
- Récupérer compte yahoo sans numéro de téléphone - Guide
- Récupérer un numéro de téléphone effacé - Accueil - Android
2 réponses
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; } }
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.
Bonne soirée.
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) :
Merci. A plus tard...