SQL ignore error SQLSTATE avec sql-mode

1012629 vues
27 octobre 2011
Joachim
sqldatabasewithlogo

 

Le SQL Mode est un paramètre du serveur de base de données MySQL qui définit la syntaxe et le comportement du langage SQL utilisé pour interagir avec la base de données.

Le SQL Mode détermine les règles d'exécution de certaines commandes SQL, telles que le comportement de la commande INSERT en cas de valeur nulle dans une colonne, la façon dont les valeurs sont comparées, triées et encodées, ainsi que la gestion des erreurs et des avertissements. Il permet également de spécifier la façon dont les chaînes de caractères et les dates sont interprétées et affichées.

Le SQL Mode peut être modifié pour répondre aux besoins spécifiques d'une application. Par exemple, certains modes peuvent être activés pour garantir la compatibilité avec des versions antérieures de MySQL ou pour activer des fonctionnalités de sécurité supplémentaires.

Le SQL Mode peut être configuré au niveau de la session, de la connexion ou du serveur entier en modifiant la valeur de la variable système "sql_mode". Les valeurs possibles du SQL Mode sont définies dans la documentation de MySQL et varient en fonction de la version du serveur de base de données utilisée.

On peut parfois être amené à travailler sur des bases de données pas toujours très clean (reprise d'un projet). Si vous partez alors sur une install de mysql banale avec un mysql Server, vous pouvez vous retrouver avec des requêtes qui ne s'exécutent plus avec succès, et un programme qui ne fonctionne plus, avec des messages d'erreurs dans vos logs qui indiquent: PHP Warning:  PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY000]: General error: 1364 Field 'myfield' doesn't have a default value in mon_chemin\toto.php on line 124

 Cas n°1: vous corrigez la base de données (bon courage)

Cas n°2: vous devez uniquement effectuer quelques petites modifs, vous n'avez pas le temps de reprendre la base de données. Il faut donc que les erreurs de type SQLSTATE ne soient pas bloquantes, même si ce n'est pas très propre. Il vous faut tout simplement modifier la variable sql-mode. Vous pouvez juste mettre:

sql-mode="";

et les erreurs SQLSTATE ne seront plus bloquantes.