J'essaie d'insérer des données dans une base de données I Obtenir cette erreur P> valeur DateTime incorrecte: '' Pour la fonction Comment puis-je par défaut mysql code> avec la requête ci-dessous.
str_to_date () code> p>
blockQuote> A code> et B code> à null code> lorsque les valeurs de variable sont manquantes. p> p>
4 Réponses :
Ne donnez pas à MySQL au format de la date. Faites-le par votre code PHP.
$a = !empty($_POST['var1']) ? $_POST['var1'] : null;
$b = !empty($_POST['var2']) ? date('d/m/Y', strtotime($_POST['var2'])) : null;
$sqlQuery = "Insert into abc(a,b) values('$a','$b')";
Veuillez ajouter une autre explication à votre code - et ne donnez pas à MySQL une chance d'effectuer des injections SQL ....
Vous devez utiliser le format
mois / jour / année: p>
Toujours inclure une explication avec votre réponse. Pourquoi ce code fonctionnerait-il? Qu'avez-vous changé et pourquoi l'avez-vous changé?
Le format standard de la date SQL est jour-mois-mois i>. Avoir la journée au centre est non psychitaire.
Ma question est différente, je ne cherche pas de formats de date, mais je fixe null
Si les colonnes sont NULL par défaut, vous pouvez les omettre dans la requête Si vous pouvez dire quelle base de données-API utilisez-vous (MySQLI ou PDO), je peux vous montrer comment créer de manière dynamique la déclaration préparée à la place, Mise à jour: Utilisation de déclarations préparées avec mysqli strong> Le code ci-dessous suppose que l'objet de connexion est appelé Insérer code> si les valeurs sont vides. Générez la requête de manière dynamique à l'aide d'un tableau et implosez-le dans votre requête. Les clés représentent les noms de colonne, la valeur de l'élément dans la matrice est la valeur à insérer.
Les liaisons MySQLI sont commandées et utilisent des espaces réservés comme ? Code>. Vous générez toujours les valeurs dans $ colonnes code> comme avant, mais la génération de la requête est légèrement différente. P>
Garniture (Str_Repeat ("?,", Count ($ colonnes)), ",") code> pour générer les espaces réservés. li>
str_repeat ("s", comptez ($ colonnes)) code> pour générer les types. LI>
... code> pour déballer toutes les valeurs. li>
ul> $ mysqli code>. p>
J'utilise mysqli
J'ai révisé ma réponse pour montrer comment créer de manière dynamique la requête en utilisant une déclaration préparée avec MySQLI.
Définissez la valeur par défaut de ces colonnes dans votre base de données en tant que null ainsi lorsque ces valeurs sont absentes, alors NULL avec automatiquement enregistré par défaut. P>
ils sont déjà défectueux à NULL, mais si la valeur est manquante, elle fait l'erreur.
Alors utilisez une déclaration conditionnelle comme: $ var1? $ var1: null;
Vous êtes grand ouvert à Injection SQL B> . Vous devez utiliser des déclarations préparées plutôt que de concaténer des variables dans votre requête. S'échapper simplement vos variables ne suffit pas. Voir Comment puis-je empêcher l'injection SQL chez PHP? a>.
Sont ces champs nullables? Vous pouvez définir les valeurs
par défaut code> deA code> etb code> à null dans mysql, puis fournit uniquement ces champs lors de l'exécution de la requête en PHP.merci @edcottrell que vous avez suggéré à juste titre, je suis fondamentalement friand d'ormes comme hibernate et sql-alchimy mais très nouveau à php
@Qirel Oui Les champs sont par défaut NULL, mais j'ai plusieurs colonnes et devront vérifier en utilisant des conditions distinctes pour seulement exécuter la requête lorsqu'elles ne sont pas nuls, je préférerais y avoir une interrogation.
Compte tenu de votre expérience passée avec hibernate, etc., jetez un coup d'œil à Doctrine
En outre, la chaîne compatible de base MySQL Date est du format 'AAAA-MM-DD'. Si vous passez vos chaînes dans ce format, il n'est pas nécessaire d'exécuter des fonctions de conversion MySQL. Avec cela - pour PHP, si vous n'allez pas utiliser de doctrine, utilisez PDO et lisez @edcottrell Link. C'est mauvais codant de ne pas le faire. De plus, la réponse d'Esnkrimi est pertinente car
Set = code> est le format que vous utilisez pour les mises à jour, pas insérer.Aussi, avant que les gens se plaignent, oui, vous pouvez utiliser ensemble =, mais comme beaucoup de choses spécifiques MySQL, juste parce que vous ne pouvez pas dire que vous devriez. Utilisez la forme standard ANSI.
:) Je vous comprends, je prends toutes ces suggestions et je les utiliserais pour de nouveaux scripts, pour l'instant, je dois faire une solution de bogues sale rapide: P et ce code de format est partout