1366 Incorrect integer value: 'null' for column

Résolu
LaChaux78 Messages postés 607 Statut Membre -  
LaChaux78 Messages postés 607 Statut Membre -

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.

A voir également:

6 réponses

NHenry Messages postés 15479 Statut Modérateur 366
 

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 607 Statut Membre 32
 

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 24281 Statut Contributeur 1 584
 

bonjour,

Finalement, tu montres ta requête INSERT.

Reste à nous montrer la structure de ta table.

0
LaChaux78 Messages postés 607 Statut Membre 32
 
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 24281 Statut Contributeur 1 584
 

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

0
LaChaux78 Messages postés 607 Statut Membre 32
 

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 24281 Statut Contributeur 1 584
 

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 607 Statut Membre 32
 

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
Pitet
 

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 607 Statut Membre 32
 

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

Je vous remercie.

0