/ / Utiliser PHP pour insérer une table JSON dans MySQL - javascript, php, mysql, json

Utilisez PHP pour insérer une table JSON dans MySQL - javascript, php, mysql, json

Je dois insérer un objet Javascript dans une nouvelle table MySQL en utilisant PHP. Mon objet est sous la forme suivante:

{
rowA:[A1,A2,A3],
rowB:[B1,B2,B3],
rowC:[C1,C2,C3],
}

J'ai aussi un tableau de noms de colonnes:

$columns = array("col1","col2","col3");

Je dois utiliser ces données pour créer et remplir une table MySQL au format suivant:

      col1 col2 col3
rowA  A1   A2   A3
rowB  B1   B2   B3
rowC  C1   C2   C3

Je peux accéder à mon serveur et créer une table, mais je ne sais toujours pas comment traiter avec JSON:

$str = file_get_contents("barchartData/US-HI.json");
$json = json_decode($str, true);
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "CREATE TABLE testTable (
// not sure how to specify column, row, and cell values from the JSON...
)";

Je suis assez nouveau en PHP et je n’ai pas réussi à obtenir du code PHP qui lisait les clés JSON et les définisse comme valeurs de ligne MySQL.

Réponses:

2 pour la réponse № 1

Comme mentionné dans le commentaire précédent, je vous recommande de scinder le problème. La création de table ne doit pas être un problème, car les valeurs ne proviennent pas du fichier JSON.

Commençons donc par valider votre fichier JSON. Vous pouvez utiliser un outil en ligne pour cela. Consultez le code ci-dessous que vous pouvez utiliser indépendamment de votre script actuel. Ce n’est pas la solution la plus élégante, mais c’est une solution qui, à mon avis, vous aidera à comprendre au mieux la solution.

<?php

echo "<pre>";  // For testing purposes.

// Convert the array to comma separated values as is
// required by the MySQL insert statement.
$fields          = array("col1","col2","col3");
$imploded_fields = implode(",", $fields);

$json            = "{"rowA":["A1","A2","A3"], "rowB":["B1","B2","B3"], "rowC":["C1","C2","C3"]}";
$decoded         = json_decode($json);

foreach ($decoded as $d) {

$values  = implode(",", $d);
$statement =  "INSERT INTO `table` ($imploded_fields) VALUES ($values)";

echo $statement; // Change this to actually execute the statement
}

J'espère que cela a du sens. Si vous souhaitez optimiser davantage cette solution, consultez des fonctions utiles telles que array_map et array_keys.