Je suis nouveau à CodeIgniter et PHP en général. J'ai fait une nouvelle table avec certaines colonnes non nulles. Les colonnes non nulles ont toutes des valeurs par défaut définies en fonction de leur type de données, donc VARCHAR a une chaîne vide, tandis que les types numériques ont 0 comme valeur par défaut.Erreur MySQL 1366 apparaît en laissant les colonnes non nulles avec des valeurs par défaut
Cependant, une fois que je remplir le formulaire (où je laisse volontairement les colonnes non nulles en blanc pour les tester), et appuyez sur le bouton d'envoi, il donne l'erreur suivante:
Error Number: 1366
Incorrect integer value: '' for column 'salary' at row 1
Il est insérait les guillemets doubles pour une chaîne vide lorsqu'elle trouve que l'utilisateur n'a saisi aucune valeur. J'ai vérifié vérifié le mode mysql et il a été passé en mode strict. Cependant, comme j'utilise un DB multitenant (Azure-clearDB), ils ne me permettent pas de super privilèges et je ne peux pas désactiver le mode strict (ou le ferais-je?)
Y at-il un moyen de désactiver ce mode, ou existe-t-il une autre solution de contournement? Je ne veux pas ajouter explicitement une clause SQL if-else pour chaque colonne, car cela serait codé en dur. S'il vous plaît aider Le code est ci-dessous:
CONTRÔLEUR:
$additional_data = array(
'first_name' => $this->input->post('first_name'),
'last_name' => $this->input->post('last_name'),
'phone' => $this->input->post('phone'),
'salary' => $this->input->post('salary'));
if ($this->form_validation->run() == true && $this->ion_auth->register($username, $password, $email, $additional_data))
{
$identity = $this->ion_auth->where('email', strtolower($this->input->post('email')))->users()->row();
$forgotten = $this->ion_auth->forgotten_password($identity->{$this->config->item('identity', 'ion_auth')});
$this->session->set_flashdata('message', $this->ion_auth->messages());
redirect('auth/success', 'refresh');
Modèle:
//filter out any data passed that doesnt have a matching column in the users table
//and merge the set user data and the additional data
$user_data = array_merge($this->_filter_data($this->tables['users'], $additional_data), $data);
$this->trigger_events('extra_set');
$this->db->insert($this->tables['users'], $user_data);
$id = $this->db->insert_id();
//add in groups array if it doesn't exits and stop adding into default group if default group ids are set
if(isset($default_group->id) && empty($groups))
{
$groups[] = $default_group->id;
}
if (!empty($groups))
{
//add to groups
foreach ($groups as $group)
{
$this->add_to_group($group, $id);
}
}
$this->trigger_events('post_register');
return (isset($id)) ? $id : FALSE;
MISE À JOUR: J'insérer des valeurs de colonnes multiples avec la même instruction d'insertion.
afficher aussi le code. –
Incluez votre code dans la question. Cela aide beaucoup avec le débogage. Je devine ici, mais il semble que vous preniez toutes les valeurs insérées dans le formulaire et l'injecter directement dans la base de données. C'est généralement une mauvaise pratique et vous voudriez désinfecter et valider l'entrée avant de la mettre dans la base de données. Sinon, cela laisse la place aux injections SQL et aux attaques. – khuderm