1366 Incorrect integer value: 'null' for column

Résolu

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

  1. Modérateur

    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.


    1. 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.

      1. Contributeur

        bonjour,

        Finalement, tu montres ta requête INSERT.

        Reste à nous montrer la structure de ta table.

    2. 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.

      1. Contributeur

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

    3. 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.

      1. Contributeur

        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)
    4. 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.

      1. 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.

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

      Je vous remercie.