2 votes

INSÉRER en mode ANSI_QUOTES

Je rencontre un problème en essayant de faire une INSERT, cela réussit même si cela ne devrait pas.

La structure de ma table : structure de la table

Remarque : given1, given2 et given3 sont des champs obligatoires.

Dans mon application, j'exécute la méthode suivante (https://github.com/catfan/Medoo):

$this->medoo->insert('teste', ['dado2' => 11, 'dado3' => 'teste']);

Cela ne devrait pas être accepté car data2 est de type SET, et data3 est de type INTEGER`. Malgré cela, l'insertion réussit. De plus, data1 n'est pas passé en argument, même s'il s'agit d'un champ obligatoire.

J'ai vérifié le journal MySQL et obtenu les entrées suivantes :

SET SQL_MODE=ANSI_QUOTES;
INSERT INTO "teste" ("dado2", "dado3") VALUES ('11', 'teste');

En exécutant ce SQL manuellement dans la base de données, j'ai découvert que le problème vient de l'utilisation de ANSI_QUOTES. La base de données accepte d'une manière ou d'une autre l'insertion, et au lieu de générer un message d'erreur, elle émet un avertissement :
capture d'écran du message de retour

Je pense qu'il est nécessaire de modifier le code source de Medoo ou de signaler ce problème à MySQL. Je ne sais pas quoi faire.

La version de MySQL est 5.7.14
J'utilise MySQL Workbench 6.3.6

0voto

Jiri Hrazdil Points 3154

Lorsque le serveur mySQL est configuré en mode STRICT, il génère une erreur lorsque vous essayez d'insérer des valeurs qui ne correspondent pas à une colonne. En appelant SET SQL_MODE=ANSI_QUOTES; ce mode strict est probablement désactivé.

Vous pouvez essayer de contacter l'auteur du framework Medoo ou plutôt utiliser un autre framework ou simplement PDO pour accéder à votre base de données.

Voir la documentation de mysql sur les modes du serveur pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X