INSERT INTO
projects(name, start_date, end_date)
VALUES
('AI for Marketing','2019-08-01','2019-12-31'),
('ML for Sales','2019-05-15','2019-11-20');
Siè possibile a vostro avviso fare un Insert multiplo?
Io non manderei 5000 campi in un solo insert. Alcune REST API (come quelle di DANEA) ti permettono di fare inserimento multipli (e letture multiple) per 10/20 record per volta. Questo è già molto perché riduci il carico di 10 volte.ma se formo una stringa composta di 5000 record con 10 campi, vuol dire più di 50000 parole per un comando via OkHttpUtils, cosa che non ho ancora provato.
Elric said:
è possibile a vostro avviso fare un Insert multiplo?
e la risposta a "Se si, come?" è, se ho capito bene, di inviare 10-20 record per volta e così i 5000 record diventano 500 o 250 invii.
e perché no?Mica posso rispondere a tutto io.
E come fai?Io preferisco inviare i record uno a uno e verificare che l'acquisizione sia avvenuta correttamente.
Li mando in Post è funziona tutto bene.
<?php
$table = ""; //Come la passo?
echo "table = $table <br /><br />";
echo "WOW! <br /><br />";
$json = file_get_contents('php://input');
//var_dump($json); // show contents
//echo "<br />";
//var_dump(count($json));
//echo "<br />";
$jsonIterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator(json_decode($json, TRUE)),
RecursiveIteratorIterator::SELF_FIRST);
$stackkey = [];
$stackval = [];
$ynStopKey = 0;
foreach ($jsonIterator as $key => $val) {
if(!is_array($val)) {
if($ynStopKey == 0) {
//print "key = ".$key."<br/>";
//print "stackkey[0] = ".$stackkey[0]."<br/>";
if($key == $stackkey[0]) {
//print "key = ".$key." & stackkey = ".$stackkey[0]."ynStopKey = 1<br/>";
$ynStopKey = 1;
} else {
//print "key = ".$key." & stackkey = ".$stackkey[0]."ynStopKey = 0<br/>";
array_push($stackkey, $key);
};
};
print $key." : ".$val . "<br/>";
array_push($stackval, $val);
};
};
echo "<br />";
for($i = 0, $size = count($stackkey); $i < $size; ++$i) {
$sql = $sql . $stackkey[$i];
if ($i < $size -1) {
$sql = $sql . ", ";
} else {
$sql = $sql . " ";
};
};
echo "key $sql";
echo "<br />";
echo "<br />";
$sql = "";
for($i = 0, $size = count($stackval); $i < $size; ++$i) {
$sql = $sql . $stackval[$i];
if ($i < $size -1) {
$sql = $sql . ", ";
} else {
$sql = $sql . " ";
};
};
echo "val $sql";
echo "<br />";
echo "<br />";
$sql = ("INSERT INTO $table (");
for($i = 0, $size = count($stackkey); $i < $size; ++$i) {
$sql = $sql . $stackkey[$i];
if ($i < $size - 1) {
$sql = $sql . ", ";
};
};
$sql = $sql . (") VALUES (");
$stackkeysize = count($stackkey);
for($i = 0, $stackvalsize = count($stackval); $i < $stackvalsize; ++$i) {
$sql = $sql . $stackval[$i] . "'";
if ($i < $stackvalsize - 1) {
//print "i = ".$i." & stackkeysize = ".$stackkeysize." & (i % stackkeysize) = ".$i % $stackkeysize."<br/>";
if ($i > 0 and ($i+1) % $stackkeysize == 0) {
$sql = $sql . ("), (");
} else {
$sql = $sql . ", ";
};
} else {
$sql = $sql . (")");
};
};
echo "$sql";
?>
$json = file_get_contents('php://input');
$json = file_get_contents(percorso+nome_file);
rispondi anche al mio quesito che sto imbastardendoMica posso rispondere a tutto io.
Comunque io manderei al php un JSON che contiene un array dei campi e dal php ricostruirei la query. Ma è solo un idea al volo, sicuramente potrebbero esserci idee migliori
Poi molti dipende da quale metodo usi nel php per passare i parametri
Nel frattempo che @Luciano Veneziano mi dica come fare, ho provato a darmi una risposta ma senza successo.
Allego progetto di test e qui di seguito una prima bozza di file php.
... che non funziona (tranne se il file json lo carico su server).
PHP:<?php $table = ""; //Come la passo? echo "table = $table <br /><br />"; echo "WOW! <br /><br />"; $json = file_get_contents('php://input'); //var_dump($json); // show contents //echo "<br />"; //var_dump(count($json)); //echo "<br />"; $jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); $stackkey = []; $stackval = []; $ynStopKey = 0; foreach ($jsonIterator as $key => $val) { if(!is_array($val)) { if($ynStopKey == 0) { //print "key = ".$key."<br/>"; //print "stackkey[0] = ".$stackkey[0]."<br/>"; if($key == $stackkey[0]) { //print "key = ".$key." & stackkey = ".$stackkey[0]."ynStopKey = 1<br/>"; $ynStopKey = 1; } else { //print "key = ".$key." & stackkey = ".$stackkey[0]."ynStopKey = 0<br/>"; array_push($stackkey, $key); }; }; print $key." : ".$val . "<br/>"; array_push($stackval, $val); }; }; echo "<br />"; for($i = 0, $size = count($stackkey); $i < $size; ++$i) { $sql = $sql . $stackkey[$i]; if ($i < $size -1) { $sql = $sql . ", "; } else { $sql = $sql . " "; }; }; echo "key $sql"; echo "<br />"; echo "<br />"; $sql = ""; for($i = 0, $size = count($stackval); $i < $size; ++$i) { $sql = $sql . $stackval[$i]; if ($i < $size -1) { $sql = $sql . ", "; } else { $sql = $sql . " "; }; }; echo "val $sql"; echo "<br />"; echo "<br />"; $sql = ("INSERT INTO $table ("); for($i = 0, $size = count($stackkey); $i < $size; ++$i) { $sql = $sql . $stackkey[$i]; if ($i < $size - 1) { $sql = $sql . ", "; }; }; $sql = $sql . (") VALUES ("); $stackkeysize = count($stackkey); for($i = 0, $stackvalsize = count($stackval); $i < $stackvalsize; ++$i) { $sql = $sql . $stackval[$i] . "'"; if ($i < $stackvalsize - 1) { //print "i = ".$i." & stackkeysize = ".$stackkeysize." & (i % stackkeysize) = ".$i % $stackkeysize."<br/>"; if ($i > 0 and ($i+1) % $stackkeysize == 0) { $sql = $sql . ("), ("); } else { $sql = $sql . ", "; }; } else { $sql = $sql . (")"); }; }; echo "$sql"; ?>
Qualcuno mi aiuta?
Con questo metodo, come passo il nome della tabella con cui poi costruire la query di insert?
Non funzionava perché l'URL da inserire è in "https" e non in "http". Una cosa stupida che avevo sottovalutato.Per l'nvio della massa di dati, invece, non capisco se c'è un errore nel mio php, perché sembra funzionare.
Infatti, se il medesimo contenuto del json che invio in POST tramite app lo copio su un file json presente all'interno del server e sostituisco
conB4X:$json = file_get_contents('php://input');
la pagina html del browser mi restituisce ciò che vorrei vedere e quindi il codice php funziona.B4X:$json = file_get_contents(percorso+nome_file);
Ma lo stesso risultato non l'ottendo con l'invio a mezzo di app B4J. Questa riesce ad estrarre un json ma sembra non riuscire ad inviarlo, perché il file php restituisce delle stringhe di controllo tranne il contenuto del json.
Perdonami ma non capisco:Grazie @Luciano Veneziano!
Grazie (1) per avermi dato un'intuizione:
Non funzionava perché l'URL da inserire è in "https" e non in "http". Una cosa stupida che avevo sottovalutato.
Nel mentre ho pensato che, dato che in POST passo una stringa, potrei manipolare la stringa nell'app (aggiungendo il comando di query e il nome della tabella) e poi manipolarla nuovamente in php ("splittando" la stringa e ricavando il comando, il nome della tabella e il json da cui recupero campi e valori).
Appena posso, aggiorno app e php.
Grazie (2) per avermi fornito il tuo metodo, che studierò!
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?