Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Chiarimento MYSQL_FETCH_ARRAY()

    Ciao a tutti,

    siamo niubbi di php e stiamo cercando di capire il funzionamento della funzione MYSQL_FETCH_ARRAY()
    Non riesciamo ad afferrare il modo corretto di utilizzarla.
    Abbiamo cercato di chiarirci le idee con un esempio pratico ma.. nulla
    Allora abbiamo pensato di scrivere nel Forum così da trovare una qualche anima pia e colta che ci potesse aiutare!

    Abbiamo:
    - creato un db: zoo
    - creato una tabella: utente
    - creato 6 colonne: uid, utipo, unome, ucognome, uusername, upassword

    Abbiamo popolato la tabella così:
    1 - 0 - nome0 - cognome0 - user0 - password0
    2 - 1 - nome1 - cognome1 - user1 - password1
    3 - 2 - nome2 - cognome2 - user2 - password2

    Abbiamo creato questo codice:

    Codice PHP:
    <?php
    $connessione
    =MYSQL_CONNECT("localhost","root","");
    MYSQL_SELECT_DB("zoo",$connessione);
    $sql="SELECT * FROM utente;";
    $query=MYSQL_QUERY($sql);
    $riga=MYSQL_FETCH_ARRAY($query);
    $lunghezza_array=COUNT($riga);

    ECHO 
    "L'array è composto da $lunghezza_array indici.

    "
    ;

    FOR(
    $i=0$i<COUNT($riga); $i++) { ECHO "Il valore all'indice $i: è ".$riga[$i]."
    "
    ; }
    ?>
    L'output a video ci lascia piuttosto perplessi e "non capiamo quello che non capiamo"

    Abbiamo:

    L'array è composto da 12 indici.

    Il valore all'indice 0: è 1
    Il valore all'indice 1: è 0
    Il valore all'indice 2: è nome0
    Il valore all'indice 3: è cognome0
    Il valore all'indice 4: è user0
    Il valore all'indice 5: è password0
    Il valore all'indice 6: è Notice: Undefined offset: 6 in..
    Il valore all'indice 7: è Notice: Undefined offset: 7 in..
    Il valore all'indice 8: è Notice: Undefined offset: 8 in..
    Il valore all'indice 9: è Notice: Undefined offset: 9 in..
    Il valore all'indice 10: è Notice: Undefined offset: 10 in..
    Il valore all'indice 11: è Notice: Undefined offset: 11 in..


    Rimaniamo perplessi da 2 cose:
    - il numero di indici.. 12??? Ci saremmo aspettati 18!!!
    - gli errori dall'indice 6 in poi??? E' come se leggesse solo la prima riga???


    Grazie per le indicazioni che vorrete darci e scusateci se vi chiediamo informazioni per voi scontate.

    Un saluto a tutti, ciao

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    $connessione=MYSQL_CONNECT("localhost","root","");
    MYSQL_SELECT_DB("zoo",$connessione);
    $sql="SELECT * FROM utente;";
    $query=MYSQL_QUERY($sql) or die (mysql_error());

    while($riga=MYSQL_FETCH_ARRAY($query) ){
    var_dump($riga);
    //faccio quello che voglio coi dati
    }

    Se la connessione e' corretta dovreste vedere cosi' i vari record col var_dump();

    mysql_fetch_array() ritorna un array con tutti i record prelevati da db in base alla ricerca fatta con la query.

    while e' usato che un ciclo e continua finche non arriva alla fine dell'array(salvo errori)

  3. #3
    Grazie m4rko80, sei stato molto gentile a risponderci.. e così velocemente!
    La connessione sembra essere corretta perché inseriamo/modifichiamo/leggiamo correttamente i record nel db.
    Potremmo chiederti, per cortesia, di provare a spiegarci quello che non capiamo?

    Sappiamo che:
    con
    Codice PHP:
    $sql="SELECT * FROM utente;"
    selezioniamo tutto il contenuto della tabella (tutte le righe di tutte le colonne).. quindi 18 record, giusto?
    con
    Codice PHP:
    $query=MYSQL_QUERY($sql); 
    eseguiamo la query SQL e ne assegniamo il risultato a $query..
    Codice PHP:
    $riga=MYSQL_FETCH_ARRAY($query); 
    creiamo un array composto da tutti i record salvati in $query.. sempre i 18 record di prima, giusto?
    codice:
    $lunghezza_array=COUNT($riga);
    contiamo il numero di indici (sempre i 18 di prima) assegnando il risultato alla variabile $lunghezza_array, giusto?

    Ma allora perché ci stampa 12 indici e non legge niente dall'indice 6 in poi?

    Abbiamo provato ad inserire anche la funzione VAR_DUMP() che ci hai indicato, così:
    Codice PHP:
    VAR_DUMP($riga); 
    e l'output è stato questo:
    array
    0 => string '1' (length=1)
    'uid' => string '1' (length=1)
    1 => string '0' (length=1)
    'utipo' => string '0' (length=1)
    2 => string 'nome0' (length=5)
    'unome' => string 'nome0' (length=5)
    3 => string 'cognome0' (length=8)
    'ucognome' => string 'cognome0' (length=8)
    4 => string 'user0' (length=5)
    'uusername' => string 'user0' (length=5)
    5 => string 'password0' (length=9)
    'upassword' => string 'password0' (length=9)


    Quindi rimaniamo perplessi sempre dal fatto che sembra venga letta solo la prima riga della tabella (o, per vederla in altro modo, il primo record di ogni colonna).. boh, non capiamo perché..

    Molte grazie, ciao

  4. #4
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    Ciao, avete provato con un semplice while come suggeriva m4rko80?
    Codice PHP:
    $connessione=MYSQL_CONNECT("localhost","root","");
    MYSQL_SELECT_DB("zoo",$connessione);
    $sql="SELECT * FROM utente;";
    $query=MYSQL_QUERY($sql) or die (mysql_error());
    $riga=MYSQL_FETCH_ARRAY($query);
    $i=0;
    while(
    $riga){
    $i++;
    echo 
    "$i) ".$riga["nome"]." ".$riga["nome"]."
    "
    //immagino siano i campi all'interno della tabella utente
    $riga=MYSQL_FETCH_ARRAY($query);

    Cosa vi stampa?
    Vi suggerisco inoltre di non utilizzare l'espediente $lunghezza_array=COUNT($riga); per poi ciclare con un fro in quanto è un uso scorretto del database, almeno per come vedo io la programmazione.

  5. #5
    Ciao jcsnake, grazie per la risposta e saluti alla bella Catania (uno di noi ha fatto il militare da quelle parti).

    In effetti abbiamo usato il WHILE prima di postare nel forum e tutto funziona bene.
    Il nostro problema è capire, nella pratica, come funziona la funzione MYSQL_FETCH_ARRAY()!!!

    Ad esempio, perché ci dice che ci sono 12 indici invece di 18???

    Di certo la colpa è nostra ma ti assicuriamo che non ci arriviamo..

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    35
    Anch'io sto studiando PHP e sono praticamente agli inizi.

    se provate questo

    Codice PHP:

    <pre>
    <?php
    do{
    print_r($riga);
    }while( 
    $riga mysql_fetch_array($query));
    ?>
    </pre>
    vedrete che in realtà, i 12 indici si riferiscono solo alla prima riga della tabella (il motivo non mi è chiaro)... in pratica il vero problema è che dovreste averne 6, non 18

  7. #7
    Ciao zave, grazie per l'indicazione.. ci stai facendo riflettere sul significato dell'indice..

    Tu dici che dovrebbero essere 6.. vuoi dire quindi che l'indice è legato alla colonna e non ai record???
    Beh, interessante.. però la 2° e 3° riga come si identificano?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    35
    Ciao ThomasTurbato (in realtà sono un po' di fretta e ho scordato le buone maniere )


    questo è un esempio di utilizzo pratico di quella funzione:


    Codice PHP:

    do{
    print 
    $riga['uid'].'
    '
    ;
    print 
    $riga['utipo'].'
    '
    ;
    print 
    $riga['unome'].'
    '
    ;
    print 
    $riga['ucognome'].'
    '
    ;
    print 
    $riga['uusername'].'
    '
    ;
    print 
    $riga['upassword'].'
    '
    ;

    print 
    '<hr />';
    }while( 
    $riga mysql_fetch_array($query)); 

  9. #9

    Re: Chiarimento MYSQL_FETCH_ARRAY()

    Ciao,
    cercherò di chiarirvi i dubbi se riesco...

    come dice la documentazione (leggerla è sempre buona partica, la rovate qui: http://php.net/manual/en/function.mysql-fetch-array.php)

    mysql_fetch_array ( ) returns an array that corresponds to the fetched row and moves the internal data pointer ahead.
    Questo significa che se voi avete

    Originariamente inviato da ThomasTurbato
    - creato un db: zoo
    - creato una tabella: utente
    - creato 6 colonne: uid, utipo, unome, ucognome, uusername, upassword

    Abbiamo popolato la tabella così:
    1 - 0 - nome0 - cognome0 - user0 - password0
    2 - 1 - nome1 - cognome1 - user1 - password1
    3 - 2 - nome2 - cognome2 - user2 - password2
    La prima volta che chiamate mysql_fetch_array ( ) questa funzione vi restituirà un array
    composto da sei elementi, (quindi con un indice che va da 0 a 5)
    contenente il primo record della vostra select

    Codice PHP:
    $row mysql_fetch_array($result);
    $row[0//conterrà 1
    $row[1//conterrà 0
    $row[2//conterrà nome0
    $row[3//conterrà cognome0
    $row[4//conterrà user0
    $row[5//conterrà Password0 

    La seconda volta che chiamate mysql_fetch_array ( ) questa funzione vi restituirà sempre un array composto da sei elementi, (quindi con un indice che va da 0 a 5) ma reletivi al record successivo della vostra select, quindi

    Codice PHP:
    $row mysql_fetch_array($result);
    $row[0//conterrà 2
    $row[1//conterrà 1
    $row[2//conterrà nome1
    $row[3//conterrà cognome1
    $row[4//conterrà user1
    $row[5//conterrà Password1 

    e così via...
    perc questo la maniera corretta di usare mysql_fetch_array ( ) è in un ciclo while...
    e non come avete provato a fare voi con un ciclo for basato sul count

    spero di essermi spiegato
    PH

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    35
    Grazie philibert, il problema di essere autodidatti, è che a volte usi il codice solo perchè "funziona"...

    Immaginavo un meccanismo del genere, ma ora è tutto più chiaro

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 © 2025 vBulletin Solutions, Inc. All rights reserved.