11
votes

La bonne façon d'insérer une null dans une base de données avec CodeDI1

J'ai extjs Publier des données d'un ComboField à Cowedigniter. Codeigniter lit les données publiées et exécute db-> insérer pour mettre à jour la base de données MSSQL.

Le problème est que si l'utilisateur ne choisit pas une sélection à partir de la combinaison, il n'est pas envoyé à CodeIntre comme rien, CodeInghighter puis lit que ce morceau de publication Données comme une chaîne vide et tente d'écrire cela sur le champ INT de la base de données causant une erreur.

Je crois que j'ai besoin de codédicteur pour traiter la chaîne comme null si elle est vide et un nombre s'il est tel. J'ai essayé d'utiliser le jonglage de type PHP (INT) pour le convertir, mais cela en fait un 0. Il s'agit d'une valeur non valide car elle ne correspond à aucune sélection dans mon individu dans mon champ Int dans mon DB.

Y a-t-il un moyen de créer des cordes vides comme des nulls au lieu de chaînes vides?

[édité pour ajouter du code] xxx


3 commentaires

Permet de supposer initialement que c'est un problème avec votre code et non du code de CodeIdItre ... en parlant, nous n'avons pas encore vu votre code ...


Ma première pensée est la suivante: "Pourquoi une valeur nulle est-elle ok, mais pas?" Par votre propre admission, une valeur nulle sera tout aussi orpheline comme une 0


Non, je ne suppose pas que ce soit un problème avec le codeignighter, je ne sais pas que j'appellerais cela un problème avec la mienne non plus. Vraiment, je me demande s'il y a un moyen pour CI de prendre les cordes vides qu'elle attrape de post et de les transmettre à la DB comme nulls au lieu de cordes car c'est ce qu'ils entrent dans CI, rien, pas une chaîne vide.


3 Réponses :


11
votes

En supposant que votre variable est nommée $ myvar en supposant que vous avez fait toutes les vérifications d'erreur, la validation et la coulée avant cela. Strong>

$myvar  = empty($myvar) ? NULL : $myvar;


2 commentaires

J'ai essayé: $ ktdata = tableau ('kt_duration' => vide ($ ceci-> entrée-> post ("Durée '))? Null: $ this-> entrée-> post (" Durée ")); Dans mon contrôleur, passez à $ ceci-> dB-> insert () et a obtenu une erreur: erreur fatale: ne peut pas utiliser la valeur de la méthode de retour dans l'écriture contextuelle


Ok j'ai une explication ici: Stackoverflow.com/questions/6730216/... et utiliser une négation avec! aidé au lieu de vide () dans mon cas.



1
votes

Il y a deux façons de résoudre le problème susmentionné.

Tout d'abord, vous pouvez simplement modifier la base de données (en supposant que vous utilisez mysql) champ à partir de "NON NULL" sur "NULL", de sorte que les chaînes vides sont automatiquement converties en null. par mysql et ne nécessiterait aucune modification de votre code. p>

Deuxièmement, vous pouvez exécuter une requête pour dire à CECONDIDEIDEL à NULL la chaîne comme telle P>

$r = ($this->input->post('r') != FALSE) ? $this->input->post('r') : NULL;


1 commentaires

La solution de Johnp a fonctionné mais merci d'avoir souligné! = Faux ainsi que la suggestion de la bibliothèque.



0
votes

Ceci a fonctionné pour moi :) J'ai assigné une double chaîne de guillemets simples chaque fois que la valeur d'entrée est null ou vide xxx


0 commentaires