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

Discussione: cursore array in php

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    107

    cursore array in php

    ciao a tutti. potrà essere una domanda stupida, ma mi ritrovo nella seguente situazione:

    codice:
    $rt = mysql_query("SELECT name FROM reserv") or die("Errore: ".mysql_error());
    $row = mysql_fetch_row($rt);
    echo $row[0];
    sono sicuro che la query restituisce 2 risultati in quanto l'ho provata direttamente nel db.
    mi stampa correttamente entrambi i risultati con il foreach o con il while.
    mi stampa correttamente il primo risultato con $row[0].
    perché invece se voglio stampare il secondo risultato con $row[1] mi dice "Undefined offset: 1"?
    credo mi sfugga il come muovere il cursore in un array.

    grazie a chi mi illuminerà

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Perché
    $row = mysql_fetch_row($rt);

    mette dentro a $row solo il primo record trovato, non tutti.
    Con echo $row[0] gli stai dicendo, stampami il primo campo dell'unico record che hai caricato

    se avessi fatto
    Codice PHP:
    $rt mysql_query("SELECT name,campo2 FROM reserv") or die("Errore: ".mysql_error());
    $row mysql_fetch_row($rt);
    echo 
    $row[1]; 
    ti stamperebbe il contenuto di "campo2" e non darebbe undefined offset

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    107
    veramente ho provato ad aggiungere una colonna al select e mi dà comunque "Undefined offset: 1".
    ad ogni modo, io intendevo che restituiva 2 tuple, non 2 colonne...
    insomma, supponendo di avere un array contenente 2 tuple da 2 colonne (2x2), come faccio a selezionare quale risultato prendere, come si faceva con le vecchie care matrici?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ho capito che la query restituisce 2 tuple, ma mysql_fetch_row() ne carica solo una alla volta, per questo va messo in un while in modo che si scorrano tutte.
    Non puoi scorrere $rt come se fosse un array, non lo è, è un result set.

  5. #5
    in parole povere per recuperare la seconda riga devi richiamare mysql_fetch_row 2 volte...

    viene mantenuto un puntatore interno all'interno del result set che viene portato avanti di uno automaticamente ogni volta che richiami la funzione.

    come da manuale:

    codice:
    array mysql_fetch_row ( resource $result )
    
    Returns a numerical array that corresponds to the fetched row and moves the internal data pointer ahead.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    107
    ok ragazzi, grazie per le spiegazioni.
    non c'è quindi un modo per fare un cast e trasformarlo in un array? devo rivedere la logica dello script altrimenti.

    infine, perché pur avendo una seconda colonna nella query, mi va in crisi (Unidentified offset) se gli do come indice 1? ho letto la documentazione ed ho provato anche con i nomi delle colonne, ma mi dà sempre il solito errore...

  7. #7
    fai un attimo di debug, dagli

    codice:
    print_r($row)
    oppure

    codice:
    var_dump($row)
    e vedi cosa contiene.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    107
    allora, con questo codice:

    codice:
    $rt = mysql_query("SELECT name notti FROM reserv") or die("Errore: ".mysql_error());
    $row = mysql_fetch_row($rt);
    var_dump($row);
    print_r($row);
    ottengo:
    codice:
    array(1) { [0]=> string(7) "prova 1" } Array ( [0] => prova 1 )
    ...quindi non contiene la seconda colonna?

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    No, e come potrebbe se fai la select solo su una?
    Devi mettere la , tra name e notti perché vengano riconosciute 2 colonne.

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    107
    avevo messo la virgola all'inizio ma ottengo l'errore "Unknown column 'notti' in 'field list'"
    allora ho provato a fare la query dal phpmyadmin e anche lì infatti mi dà errore con la virgola...senza virgola invece mi restituisce il risultato giusto

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.