/ / Usa PHP per inserire JSON nella tabella MySQL: javascript, php, mysql, json

Usa PHP per inserire JSON nella tabella MySQL: javascript, php, mysql, json

Ho bisogno di inserire un oggetto Javascript in una nuova tabella MySQL usando PHP. Il mio oggetto è nella seguente forma:

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

Ho anche una matrice di nomi di colonne:

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

Ho bisogno di usare questi dati per creare e riempire una tabella MySQL nel seguente formato:

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

Posso accedere al mio server e creare una tabella, ma non sono ancora sicuro di come trattare con 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...
)";

Sono abbastanza nuovo per PHP e non sono stato in grado di ottenere codice in PHP funzionante che legge le chiavi JSON e le imposta come valori di riga MySQL.

risposte:

2 per risposta № 1

Come menzionato nel commento precedente, ti consiglio di dividere il problema: la creazione della tabella non dovrebbe essere un problema perché i valori non provengono dal file JSON.

Quindi iniziamo convalidando il tuo file JSON. Puoi usare uno strumento online per questo. Dai un'occhiata al codice qui sotto che puoi eseguire separatamente dal tuo script corrente. Non è la soluzione più elegante ma è quella che penso possa aiutarti a capire meglio la soluzione.

<?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
}

Spero che questo abbia un senso. Se si desidera ulteriormente ottimizzare questa soluzione, consultare le funzioni utili come array_map e array_keys.