Non vedo l'allegato con gli errori.
Prova il mio script non devi stampare il json altrimenti occupi inutilmente memoria ma limitati alla funzione strlen come da codice per il test, quando risolvi lo modifichi nel tuo caso d'uso.
Codice PHP:
error_reporting(-1);
ini_set('display_startup_errors', '1');
ini_set('display_errors', '1');
$mmusage = memory_get_usage();
//se da fonte esterna $_GET, $_POST
$id = null;
if(isset($_GET['id']) && is_string($_GET['id'])) {
if(strlen($_GET['id']) && trim($_GET['id'], '0123456789') === '' && (($id = (int) $_GET['id']) < 0 || $id > 7901)) {
$id = null;
}
}
//ovviamente se non esiste $_GET['id'] sarà null $id senza impostare esplicitamente $id, il successivo esempio imposta a 0 $id manualmente.
$id = 0;
if($id !== null) {
if($id == 0){
//ovviamente dovrò inizializzare solo se id è diverso da null, qui va anche la connessione al database
//altrimenti nulla
$query="SELECT * FROM comuni ORDER BY comune";
}else{
$query="SELECT * FROM comuni WHERE provincia = '" . $id . "'" . ' ORDER BY comune';
}
$result = $connessione->query($query);
$indice = 0;
while($row1 = $result->fetch_array(MYSQLI_ASSOC))
{
$testo[$indice] = $row1['comune'];
$valore[$indice] = $row1['id'];
$indice = $indice + 1;
}
/* free result set */
$result->close();
/* close connection */
//$connessione->close();
$indice = $indice - 1;
$arr = array('indice' => $indice,
'elenco' => array('testo' => $testo,
'valore' => $valore));
$data = json_encode($arr);
$testo = null;
$valore = null;
$row1 = null;
$arr = null;
unset($testo, $valore, $row1, $arr);
echo strlen($data) . "\n";
echo $indice . "\n";
echo errors_get_last() . "\n";
echo json_last_error() . "\n";
echo $mmusage . "\n";
echo memory_get_usage();
}
Probabilmente il messaggio d'errore con $id 0 ti indica errore , vuole il parametro LIMIT per l'istruzione SQL SELECT, generalmente la migliore pratica è recuperare un tot per pagina "paginazione" per non appesantire la propria applicazione se non necessario.
Se imposti $id = 10, recupera solo la provincia 10 mentre esiste la possibilità di usare range anche con SQL (questo in seguito , prima devi risolvere il problema).