Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Foreach array mysql: non sempre viene prelevato il valore dal DB

    Ciao a tutti,
    mi trovo con un curioso problema. Utilizzo questo codice:

    //creo altri due array con gli stessi indici per il nome Azienda e la Partita IVA
    foreach ($arrIDordinivoci as $key=>$value)
    {
    $query3="SELECT * FROM azienda WHERE IDazienda=".$arrIDazienda[$value];


    require 'connessione_db.php';
    $result = $mysqli->query($query3, MYSQLI_USE_RESULT);
    $row=$result->fetch_assoc();

    $arrNomeAzienda[$value]=$row['Nome'];
    $arrPartitaIva[$value]=$row['PartitaIva'];


    $mysqli->close();
    }

    Il ciclo FOREACH funziona perfettamente. Il problema avviene nel recupero dei dati dal DB: con la stessa SELECT sql alcune volte preleva il valore ed altre no.

    Qualcuno è già incappato in qualcosa di simile?

    Premetto che uso lo stesso codice in un altro ciclo FOREACH che preleva dati da un'altra tabella e funziona perfettamente.


  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Invece di eseguire le query, stampale con un echo, così vedi come vengono generate e se sono corrette o meno.
    Codice PHP:
    ...

    foreach (
    $arrIDordinivoci as $key=>$value)
    {
        
    $query3="SELECT * FROM azienda WHERE IDazienda=".$arrIDazienda[$value];
        echo 
    $query3."<br />";
    }
    exit; 

  3. #3
    Già fatto. Ed alcune volte il valore non viene prelevato anche se il WHERE IDazienda= ha lo stesso valore.

    Questo è il codice completo con l'ECHO che sto usando per testing:

    //creo altri due array con gli stessi indici per il nome Azienda e la Partita IVA
    foreach ($arrIDordinivoci as $key=>$value)
    {
    $query3="SELECT * FROM azienda WHERE IDazienda=".$arrIDazienda[$value];


    require 'connessione_db.php';
    $result = $mysqli->query($query3, MYSQLI_USE_RESULT);
    $row=$result->fetch_assoc();
    $NomeAzienda1=$row['Nome'];
    $PartitaIva1=$row['PartitaIva'];
    $arrNomeAzienda[$value]=$row['Nome'];
    $arrPartitaIva[$value]=$row['PartitaIva'];


    echo "$key) QUERY3: $query3<br>".$arrNomeAzienda[$value]."//".$arrPartitaIva[$value]."<br>".$NomeAzienda1."||".$PartitaIva1."<hr>";
    $mysqli->close();
    }

    ed il risultato è questo:

    1615) QUERY3: SELECT * FROM azienda WHERE IDazienda=100362
    Edilcantieri //01234567890
    Edilcantieri ||01234567890
    1614) QUERY3: SELECT * FROM azienda WHERE IDazienda=100362
    //
    ||
    1616) QUERY3: SELECT * FROM azienda WHERE IDazienda=100362
    Edilcantieri //01234567890
    Edilcantieri ||01234567890
    1617) QUERY3: SELECT * FROM azienda WHERE IDazienda=100362
    Edilcantieri //01234567890
    Edilcantieri ||01234567890

    Inoltre non ha mai la stessa frequenza (es. 1sì/1no, 4si/1no/2si, etc).
    Non so più che provare.
    Ultima modifica di flaracca; 26-04-2014 a 09:02

  4. #4
    mettiamo ordine.. perchè quel codice sembra fatto con poca logica..
    Prima di tutto è insensato in un ciclo connettersi al database, fare una domanda, disconnettersi per poi ricominciare il ciclo. Se facciamo un paragone è come se tu ti recassi in un ufficio dove hai molte domande da fare e facessi così: entri, fai una domanda poi esci dall'ufficio e subito dopo rientri, fai la seconda domanda e esci di nuovo e così via finchè non hai fatto tutte le domande che dovevi fare. Capisci subito che la cosa non ha senso.

    Altra cosa.. Secondo me il valore della variabile $value è per più volte uguale.. se è così l'array:
    Codice PHP:
    $arrNomeAzienda[$value]=$row['Nome'];
    $arrPartitaIva[$value]=$row['PartitaIva']; 
    ha poco senso.
    Mostraci gli array che usi che sono curioso. Basta un: var_dump($ARRAY CHE VUOI STAMPARE);.

    Sostituisci MYSQLI_USE_RESULT con MYSQLI_STORE_RESULT e dicci come và.
    Ultima modifica di W Thunderbird; 26-04-2014 a 10:22

  5. #5
    Grazie a tutti per il vostro interesse.
    W Thunderbird, ho sostituito USE con STORE e funziona Grazie!

    Questo è un mio programma personale per tenere traccia delle provvigioni guadagnate.

    Le tabelle interessate sono 3: Azienda, Ordini, OrdiniVoci.

    Il pezzo di codice che ho postato è parte della pagina che estrapola le provvigioni non pagate in un dato periodo.

    Tabella Azienda: IDazienda, NomeAzienda, PartitaIva;
    Tabella Ordini: IDordini, Data, IDazienda;
    Tabella OrdiniVoci: IDordinivoci, IDordini, IDazienda, Descrizione, Qtà, Prezzo, Pagato

    Un maschera mi permette di scegliere:
    Data dal + data al;
    Pagato (si, no, tutti)

    La sequenza di filtro è questa:
    Estrapolo tutti gli ordini nel timeframe dalla tabella IDordini;

    Estrapolo tutte le voci di ogni singolo ordine che soddisfano il criterio Pagato (posso avere ordini pagati a metà...) dalla tabella OrdiniVoci;

    Poi estrapolo per ogni singola voce il NomeAzienda+PartitaIva dal parametro IDazienda interrogando la tabella Azienda.

    Tutti questi dati vengono inseriti in una tabella Riepilogo (che uso poi per scaricarli in excel).

    Per inserire tutti questi dati nella tabella creo un array per ogni singolo parametro della tabella Riepilogo e come indice comune di tutti gli arrays uso l'IDordinivoci.

    Ho fatto questo per due motivi:
    1) Bassa conoscenza delle potenzialità di PHP e MySQL e scarso tempo da dedicare;
    2) Cercando online ho visto che non posso attivare due queries diverse su diverse tabelle su singola chiamata al DB;

  6. #6
    Quote Originariamente inviata da flaracca Visualizza il messaggio
    Grazie a tutti per il vostro interesse.
    W Thunderbird, ho sostituito USE con STORE e funziona Grazie!
    Sostituiscilo in tutte le query che fai, perchè se funzionavano era abbastanza a "fortuna" (in realtà ci sono delle ragioni tecniche.. ma ho capito che hai preso quel codice copiato da qualche parte senza capirlo troppo)

    2) Cercando online ho visto che non posso attivare due queries diverse su diverse tabelle su singola chiamata al DB;
    Falso come una banconota da un euro e mezzo. Spesso ci si connette ad un database all'inizio dello script e si chiude la connessione alla fine dello script. In mezzo puoi fare tutte le query che vuoi al database al quale sei collegato, come è giusto che sia.

    I migliori alleati per un programmatore sono carta e penna ( ma anche matita e gomma ) e i manuali tecnici di ciò che si usa.. quello di php lo trovi su php.net

  7. #7
    Grazie per l'aiuto ed il suggerimento. Ho modificato (poi controllerò le ragioni tecniche che citi) in tutto il programma USE con STORE. Proverò ad eseguire più queries con una singola connessione al DB (al momento applico il detto "codice che funziona non si cambia" ).
    Sei stato di grande aiuto. Alla prossima.

Tag per questa discussione

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.