Problème Data Truncated

Résolu
Bonjour,

J'insère mes données en DB via une boucle for, cependant certain champs de type <input> peuvent être vides. Ducoup SQL me mais une erreur de type
Warning: 1265 Data truncated for column...

Je précise que malgré l'erreur, mes données sont bel et bien inséré dans ma DB.

Comment y remedier ?

1 réponse

  1. Modérateur
    Bonjour,

    Commence par nous montrer les structure de ta table
    Puis, le code PHP utilisé pour faire tes insertions.

    0
    1. CREATE TABLE IF NOT EXISTS `subs` (
        `id` int(11) NOT NULL,
        `year` int(11) NOT NULL,
        `value` double NOT NULL,
        PRIMARY KEY (`id`,`year`),
        KEY `year` (`year`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


      public function insert_sub($id, $year, $value){
             $query = "INSERT INTO subs (id, year, value) values (:id, :year, :value)";
      			$ps = $this->_db->prepare($query);
                              $ps->bindValue(':id',$id);
      			$ps->bindValue(':year',$year);
      			$ps->bindValue(':value',$value);
      return $ps->execute();


      if (!empty($_POST)){
      			$id = $_POST['id'];
      			$year = $_POST['year'];
      			$value = $_POST['value'];
      
      			for ($i=0; $i < count($id) ; $i++) {
      			       Db::get_instance()->insert_sub($id[$i], $year[$i], $value[$i]){
      			}
      }//end post
      
      0
    2. Modérateur
      Et le message d'erreur complet ?
      Warning: 1265 Data truncated for column...

      il indique quelle colonne ?
      0
    3. SQLSTATE[01000]: Warning: 1265 Data truncated for column 'value' at row 1
      0
    4. Il indique la colonne 'value'
      0
    5. Modérateur
      Tu as choisi, dans ta bdd, `value` double NOT NULL,
      Il s'attend donc à avoir un nombre.
      Si tu y met du texte ( ou vide... qui est considéré comme une chaine de texte vide)... il te retourne forcément un warning.
      Donc soit tu autorises le NULL dans ce champ (et quand tu veux ne rien y mettre.. tu y mets du "null" )
      soit tu fixes ta valeur à zero.
      0