Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28

Discussione: Creare array da query

  1. #1

    Creare array da query

    Buongiorno.
    Devo creare un array da una semplice query "Select * from table".
    L'array poi mi serve, per creare una tabella HTML per mostrare a video tutti i risultati.
    Ho provato e riprovato tipo:
    Codice PHP:
    //per ottenere il nome dei campi:
    $result $this->connect->query("SHOW COLUMNS FROM table);
    while(
    $row1 = mysqli_fetch_array($result)){$arrFields[] = $row1['Field'];}
    Per questo non ho problemi 
    però vorrei che in una unica query potessi ottenere sia il nome dei campi che il valore a loro associato
    Codice PHP:
    while($row mysqli_fetch_array($query)){    $arrDati[] = array($row);}
    //cosi non funziona e mi restituisce l'errore Array to string conversion 
    Anche se converto o con Implode() oppure con [COLOR=var(--highlight-color)]json_encode[/COLOR]() non funziona ugualmente.

    Potete aiutarmi cortesemente?
    PS: questo script mi servirà per N tabelle, quindi non posso sapere quanti e quali campi avranno al loro interno
    Grazie.

  2. #2
    Devi usare mysqli_fetch_assoc, che ti restituisce un array con indici i nomi dei campi e valori i valori dei campi.

    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  3. #3
    ho fatto cosi e funziona:
    Codice PHP:
    while ($row1 mysqli_fetch_array($query,MYSQL_ASSOC)) {    array_push($arrFields,$row1);} 
    quello che mi serve e che non riesco a fare è, eliminare due campi dall'array, ho provato cosi ma senza risultato:
    Codice PHP:
    $array = ["id_menu_p","id_menu_s"];foreach($arrFields as $key){    if (array_key_exists($key,$array)){        unset($arrFields[$key]);    }}var_dump($arrFields); 
    Sai come posso risolvere?
    Grazie mille.

  4. #4
    Se quello che ti serve è rimuovere due CHIAVI dell'array, allora hai bisogno di

    https://www.php.net/manual/en/functi...y-diff-key.php

    $arrFields=array_diff_key($arrFields,["id_menu_p"=>"","id_menu_s"=>""]);

    Quello che hai fatto tu lascia gli elementi nell'array ma ne mette a NULL il valore.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  5. #5
    Funziona, grazie mille.
    Ultima modifica di ANTAGONIA; 20-01-2022 a 12:08

  6. #6
    No, scusami, non funziona.
    In pratica non mi riconosce la funzione array_diff_key.
    Su php.net indica come versioni del php installato >5.1.0, e poi 7 o 8.
    Quella che ho è la
    5.6.40 quindi maggiore delle 5.1.0, ma non la riconosce.

  7. #7
    Impossibile che non sia disponibile la funzione, è una di quelle super antiche che esistono da tempo immemore.

    Posta il codice completo che stai usando adesso!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  8. #8
    E' quello del primo post
    Codice PHP:
    $query$this->connect->query("SELECT * FROM tb_menu WHERE id_menu_s IN (".$request.") ORDER BY id DESC");
    while (
    $row1 mysqli_fetch_array($query,MYSQL_ASSOC)) {    array_push($arrFields,$row1);}$array = array("id_menu_p"=>"","id_menu_s"=>"");
    $arrFields=array_diff_key($arrFields,$array);
    var_dump($arrFields); 
    Stampando l'array questo è quello che ottengo, semplificato:
    Codice PHP:
    array(211) {  [0]=>  array(23) {    ["id"]=>    string(3"226"    ["id_menu_p"]=>    string(2"64"    ["id_menu_s"]=>    string(3"641"    ["DtInsert"]=>    string(10"2022-01-10"    ["DtInizioValidita"]=>    string(10"2022-01-10"  }  [1]=>  array(23) {    ["id"]=>    string(3"224"    ["id_menu_p"]=>    string(2"64"    ["id_menu_s"]=>    string(3"641"    ["DtInsert"]=>    string(10"2021-12-06"    ["DtInizioValidita"]=>
        
    string(10"2022-01-10"}

    Che poi non ho capito, un altra cosa, perché dentro l'array $arrFields ho un altro array?

  9. #9
    codice:
    	$query= $this->connect->query("SELECT * FROM tb_menu WHERE id_menu_s IN (".$request.") ORDER BY id DESC");	$arrayRows=array();
    	$fieldsToRemove = array("id_menu_p"=>"","id_menu_s"=>"");
    	while ($thisrow = mysqli_fetch_assoc($query))
    		{
    		$thisrow=array_diff_key($thisrow,$fieldsToRemove);
    		$arrayRows[]=$thisrow;
    		}
    		
    	var_dump($arrRows);
    Allora, quello che forse non ti è chiaro è che con la while stai leggendo TUTTI i record restituiti dalla query, quindi se vuoi eliminare dei campi lo devi fare PRIMA di inserire l'array della riga, restituito dalla mysqli_fetch_assoc, nell'array principale $arrayRows, il quale conterrà tanti elementi quanti sono i record restituiti dalla query, OGNUNO DEI QUALI sarà un array con i campi del relativo record ed i rispettivi valori.

    Detto questo, tutto questo è ASSOLUTAMENTE SBAGLIATO: se, come è chiaro dal codice, stai creando due righe più sopra la query, NON HA NESSUN SENSO che tu faccia restituire tutti i campi dalla tabella quando ne vuoi solo alcuni:

    NON fare SELECT * FROM, ma fai SELECT campo_che_mi_serve1, campo_che_mi_serve2, ...

    Elencando i campi che ti servono e omettendo i campi che non vuoi... E' inutile, rischioso, dispendioso e controproducente fare restituire tutti i campi quando te ne servono solo alcuni!

    Infine: hai attentamente controllato cosa c'è nella variabile $request, VERO? VERO? Mi raccomando, NON è una variabile il cui valore viene preso direttamente da $_GET, $_REQUEST, $_POST o $_SERVER, VERO? Giuramelo, perché se non è così con un solo accesso ti possono eliminare tutte le tabella del db...
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  10. #10
    Ho risolto cosi:
    Codice PHP:
    $array = array("id_menu_p"=>"","id_menu_s"=>"");while ($row1 mysqli_fetch_array($query,MYSQL_ASSOC)) {    foreach($array as $k =>$v){        if(array_key_exists($k,$row1)){            unset($row1[$k]);        }    }    $arrFields[] = $row1;} 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.