Initialisation d'un champ de database MySQL de type JSON
RésoluGutt-V Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai, une nouvelle fois, besoin de vos lumières.
Cette fois, je m'attaque au type de données JSON de la base de données MySQL.
Je crois avoir compris qu'il faut, avant tout, initialiser le champ de type JSON s'il est NULL.
Pour cela, j'ai le code suivant :
//initialise l'enregistrement si null $req = "UPDATE {$this->table} SET data3= JSON_SET(data3,'$.preferences',JSON_ARRAY()) WHERE data1= :data1AND data2 = :data2 AND JSON_TYPE(data3->'$.preferences') IS NULL"; $this->db->prepare($req, [':data1' => $this->data1, ':data2' => $this->data2], $this->class, true); $req = "UPDATE {$this->table} SET data3 = JSON_ARRAY_INSERT(data3,'$.preferences[0]', :data3) WHERE data1= :data1 AND data2= :data2"; $this->db->prepare($req, [':data3' => $this->data3, ':data1' => $this->data1, ':data2' => $this->data2], $this->class, true);
Je précise que j'ai plusieurs fois vider le cache, que ma $this->db fonctionne très bien, mais que je n'arrive pas à insérer la moindre donnée dans data3 ..
Pour complèter, même si, pour moi, la cause n'est pas là, je vous met la procédure prepare de mon $this->db :
* Prepare * @param string $statement requète à passer * @param array $attributes paramètres pour le execute * @param string $class_name nom de la classe dans laquelle retourner les données * @param bool $unique true si un seul résultat attendu false si FetchAll * @return mixed */ public function prepare(string $statement, array $attributes, string $class_name = null, $unique = false) { try { $requete = $this->getPDO()->prepare($statement); dump($class_name); if ($class_name === null) { $requete->setFetchMode(PDO::FETCH_OBJ); } else { $requete->setFetchMode(PDO::FETCH_CLASS, $class_name); } $res = $requete->execute($attributes); if (strpos($statement, 'UPDATE') === 0 || strpos($statement, 'INSERT') === 0 || strpos($statement, 'DELETE') === 0) {// pas de données à renvoyer return $res; } if ($unique) { $datas = $requete->fetch(); } else { $datas = $requete->fetchAll(); } return $datas; } catch (\Exception $e) { throw new \Exception("Impossible d'effectuer la requête : " . $statement . " : " . $e->getMessage()); } }
Dernière précision,
Ma database est une mysql composée de 3 champs :
data1 : INT de taille 10 non signé
data2 : VARCHAR de taille 200 NULL autorisé
data3 JSON NULL autorisé
Merci d'avance pour essayer d'éclairer ma lanterne !
- Initialisation d'un champ de database MySQL de type JSON
- Borland database engine - Télécharger - Édition & Programmation
- Clear type - Guide
- Type de ram - Guide
- Mysql community server - Télécharger - Bases de données
- Incompatibilité de type vba ✓ - Forum Excel
2 réponses
Bon,
J'ai fini par trouver, je pose le code ici pour ceux qui se poseraient la question :
//initialise l'enregistrement $req = "INSERT INTO {$this->table} (`data1` ,`data2` ,`data3`) VALUES ($this->data1, :$this->data2, JSON_ARRAY('$data3')) $this->db->query($req, null, true); //rajoute des éléments à l'array $req = "UPDATE {$this->table} SET data3 = JSON_ARRAY_APPEND(data3,'$[0]', :data3) WHERE data1= :data1 AND data2= :data2"; $this->db->query($req, null, true)
Ok, je passe sans requête préparée pour tester, mais c'est pour donner une idée