0
votes

JSON_Decode renvoie NULL au lieu de NULL sur la demande postale, m'empêche de définir NULL dans la DB

J'ai la question que je dois pouvoir mettre une valeur nulle dans une base de données MySQL. Donc, de la façade, j'envoie un objet JavaScript de base: xxx pré>

dans mon fichier PHP, je reçois la demande correctement et décodez-le: p>

  $sql = "UPDATE `users` SET 
  `Username`='$request->Info->Name',
  `Date`='$request->Info->Date' //DB accepts NULL but not null (tested)
  WHERE `id` = '{$id}' LIMIT 1";


12 commentaires

Vous devriez utiliser des relevés préparés et des variables de liaison, cela (AFAIK) résoudra votre problème.


Voir cette question: Stackoverflow.com / Questions / 34859629 / ...


Le problème est que les citations autour de votre valeur NULL permettent à MySQL l'interpréter comme une chaîne. '$ demande-> info-> date' aussi, null === null dans php BTW.


Pouvez-vous utiliser sans citations autour de lui comme {$ Demande-> info-> date}


{"Info": {"Nom": "Michelangelo", "Date": NULL} n'est pas valide JSON c'est la raison pour laquelle JSON_Decode retourne Null ..


@Raymondnijland fixe. JSON est correct dans mon code réel


Dans ce cas, postez plus de code pour que nous puissions voir le contrôle de flux.


Sommes-nous en train de déboguer pseudo code ??? Thats ne fonctionnera pas, vous obtenez seulement des pseudo réponses et des commentaires


@Riggsfolly C'est une version simplifiée. Quel est le problème? Vous voulez lire plus de colonnes?


@Sravanthpujari qui me donnera une erreur.


@Michelangelo voir ma réponse


@fonini ne fonctionne pas. Il va toujours insérer le 0000-00-00


3 Réponses :


1
votes

C'est généralement une bonne idée de ne pas prendre les valeurs directement à partir de la saisie de l'utilisateur (peu importe la quantité que vous pensez que vous devriez faire confiance à la source). Voir aussi Obligatoire XKCD .

Étant donné que vous mappiez et nettoie les données lorsque vous construisez votre requête (utilisez probablement des énoncés préparés), il devrait être trivial pour mapper la valeur null à la chaîne "null" " (ou simplement laisser la bibliothèque de relevé préparée le gérer).


1 commentaires

Thnx, peut-être essayera de le faire avec des déclarations préparées. J'allais faire ça à un moment donné, mais je me suis retrouvé avec ce problème.



0
votes

Le problème n'est pas lié aux variations de NULL ou NULL. En PHP, ils sont la même chose.

Vous êtes probablement en cours d'exécution dans le mode MySQL no_zero_Date, qui remplit les dates nulles avec des zéros. La commande ci-dessous modifie la manière dont les dates NULL sont gérées par MySQL. xxx

Plus d'infos Ici .


3 commentaires

Est-ce que cela résout le problème de NULL étant converti en 0000-00-00, ou bloquez simplement la possibilité de définir une date à 0000-00-00?


Dans le manuel MySQL: "MySQL vous permet de stocker une valeur" zéro "de '0000-00-00' comme une date factice." Ceci est dans certains cas plus pratique que d'utiliser des valeurs NULL et utilise moins de données et d'index d'espace. Pour intervenir '0000-00-00', activer le mode NO_ZERO_DATE. "


Essayé, cela n'empêche pas les valeurs 0000-00-00 .



5
votes

Le problème est que vous mettez la "null" entre guillemets simples! XXX PRE>

Solution: Utilisez des paramètres de liaison dans votre déclaration préparée. https://www.php.net/manual/fr/pdo.prepare. PHP P>

$info = new InfoRequest($request);
$sth->bindParam(':username', $info->name(), PDO::PARAM_STR);


5 commentaires

Thnx va y arriver. Je n'ai pas fait PHP depuis longtemps, je ne savais pas que Sanatiser était si crucial pour obtenir les valeurs correctes. J'allais faire cela à un moment donné, mais je ne pensais pas que cela me causerait des problèmes quand je ne le ferais pas.


Dans les commentaires ci-dessous la question, ils sont plus préoccupants de la version simplifiée du code que j'ai posté, mais pourquoi quand je Var_dump la demande, cela me dit NULL, mais plus tard, il est converti comme magiquement converti en null? Juste une bizarrerie de SQL en combinaison avec PHP?


Je ne te suive pas, désolé. Pourriez-vous me donner plus de détails sur le contexte de votre question?


Lorsque je var_dump Le JSON décodé dans un autre fichier (ne provenant pas d'une demande), il convertit le JSON NULL's pour corriger les valeurs NULL dans PHP. Je trouve étrange que, quand cela fait-il de la demande convertit JSON NULL à NULL en PHP.


Oui, à coup sûr, @dharman, je viens de me précipiter dans mon exemple. Vous avez absolument raison :)