1366 Incorrect integer value: 'null' for column

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 30 mars 2023 à 21:11
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 31 mars 2023 à 12:49

Bonjour lorsque je veux faire un INSERT dans ma BDD via un formulaire j'ai cette erreur,

Erreur ! SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'null' for column 'idaut' at row 1

Malheureusement je ne peux pas faire mon INSERT en mettant une valeur à vide. J'ai essayé de mettre mon champs à NULL et une valeur par défaut à 0 dans phpMyAdmin mais en vain.

J'ai fait également cette condition mais toujours pas le résultat attendu.

$idaut = isset($_POST['idaut']) ? $_POST['idaut'] : 0;

if (empty($idaut)) {
REQUETE INSERT
}

Je vous remercie pour votre aide.

6 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
30 mars 2023 à 21:57

A quoi sert ton

if (empty($idaut))

Je pense que tu veux plutôt faire

if ($idaut==0)

Ensuite, il faut voir comment tu fais ta requête SQL.

Peut être as-tu fais une faute de frappe sur le nom de la variable au moment de la mettre dans la requête.


0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
30 mars 2023 à 23:44

en fait ma condition c'était si $idaut est vide alors on INSERT voici la requète,

				if (empty($idaut)) {
				$sql = "INSERT INTO cdc_oeuvres (oeuvre, idaut, idorch, conduct) VALUES (:oeuvre, :idaut, :idorch, :conduct)";
				$datas = array('oeuvre' => $oeuvre, 'idaut' => $idaut, 'idorch' => $idorch, 'conduct' => $conduct);
				$result = executeQuery($sql,$datas);
				$typenr = "enregistré";
				$reqaj = $sql;  
				$success = "<span class='success'>La nouvelle oeuvre - ".trim(stripslashes("$oeuvre"))." - a été $typenr.</span>";
				}

J'ai essayé aussi

if ($idaut==0)

mais toujours impossible de faire un INSERT si je laisse une valeur vide. Par contre si j'envoie tous les champs avec une valeur l'INSERT se fait correctement.

0
yg_be Messages postés 22714 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 avril 2024 1 474
30 mars 2023 à 23:53

bonjour,

Finalement, tu montres ta requête INSERT.

Reste à nous montrer la structure de ta table.

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
30 mars 2023 à 23:57
DROP TABLE IF EXISTS `cdc_oeuvres`;
CREATE TABLE IF NOT EXISTS `cdc_oeuvres` (
  `idoeu` int NOT NULL AUTO_INCREMENT COMMENT 'ID de l''oeuvre musicale',
  `oeuvre` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Nom de l''oeuvre musicale',
  `idaut` int DEFAULT '0' COMMENT 'ID de l''auteur de l''oeuvre musicale',
  `idorch` int NOT NULL COMMENT 'ID de l''orchestration',
  `conduct` tinyint(1) NOT NULL COMMENT 'A 1 si Conducteur',
  PRIMARY KEY (`idoeu`),
  KEY `idaut` (`idaut`),
  KEY `idorch` (`idorch`)
) ENGINE=MyISAM AUTO_INCREMENT=807 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Table de relation : oeuvres - auteurs - orchestrations';

c'est donc bien la valeur idaut que je souhaite laisser vide.

0
yg_be Messages postés 22714 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 avril 2024 1 474
31 mars 2023 à 08:34

Pour laisser une valeur "vide", il ne faut pas la mettre dans l'INSERT.

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
31 mars 2023 à 08:59

Bonjour Excuse moi je me suis mal expliquée. Par contre cette valeur peut rester vide et également être sélectionnée (non vide) cela dépends. Je vous remercie.

0
yg_be Messages postés 22714 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 avril 2024 1 474
31 mars 2023 à 09:13

Il faut donc prévoir deux INSERT, un avec et un sans ce champ.  Et exécuter le bon.

INSERT INTO cdc_oeuvres (oeuvre, idorch, conduct) VALUES (:oeuvre, :idorch, :conduct)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
31 mars 2023 à 10:28

Bonjour alors d'après ce que tu me dit il faut mettre une condition sur chaque INSERT? .je ne comprends pas trop en fait.

0

Bonjour,

Si $idaut est facultatif et avec une valeur par défaut, as tu vraiment besoin de vérifier si la variable est vide avec empty ?

$idaut = isset($_POST['idaut']) ? intval($_POST['idaut']) : 0;

$sql = "INSERT INTO cdc_oeuvres (oeuvre, idaut, idorch, conduct) VALUES (:oeuvre, :idaut, :idorch, :conduct)";
$datas = ['oeuvre' => $oeuvre, 'idaut' => $idaut, 'idorch' => $idorch, 'conduct' => $conduct];
$result = executeQuery($sql,$datas);

Si $_POST['idaut'] n'est pas défini, l'œuvre sera insérée avec un champ idaut égal à 0.

1
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
31 mars 2023 à 12:49

Bonjour un grand merci cela est bien comme je le souhaitais.

Je vous remercie.

0