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

    Query select in una funzione, come ciclarla?

    Ciao a tutti,
    ho un piccolo rompicapo che sta mettendo a dura prova la mia pazienza... e credo che a questo punto solo voi potete aiutarmi....

    Il mio problema riguarda una semplicissima Query Select che seleziona ed estrae alcuni dati in un DB mysql.
    Questa query viene utilizzata in diversi file e quindi ho pensato di metterla in una funzione e di richiamarla ogni volta che occorre in modo da semplificare e velocizzare anche le operazione di debug.
    Ho provato in mille modi diversi ma non riesco a ciclare i risultati della select e quindi a stampare a video tutti i record che miinteressano.

    Vi posto la query per meglio esporre il problema:

    // FUNZIONE
    Codice PHP:
    function prova_query($db)
    {
    $query_prova  "
    SELECT * FROM nome_tabella_sql LIMIT 20
    "
    ;
    $result_elenco mysql_query($query_prova$db);
    $row_elenco mysql_fetch_array($result_elenco);

    return 
    $row_elenco;

    // RICHIAMO LA FUNZIONE E CICLO IL RISULTATO
    Codice PHP:
    $richiamo_funzione prova_query($db);

    while (
    $richiamo_funzione)
    {
    echo 
    $row_elenco['id_record'];


    // RISULTATO OTTENUTO
    Codice PHP:
    1
    1
    1
    1
    1
    ... 
    In questo modo ottengo solo la stampa del primo record della tabella sql nome_tabella_sql stampa che tra l'altro non si arresta ma si ripete all'infinito.

    Come posso risolvere la cosa?
    E' possibile inserire una query selet in una funzione e richiamarla quando serve e stampare il risultato?

    Ciao e buona domenica

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505

    Re: Query select in una funzione, come ciclarla?

    FUNZIONE
    Codice PHP:
    function prova_query($db)
    {
        
    $query_prova  "SELECT * FROM nome_tabella_sql LIMIT 20";
        
    $result_elenco mysql_query($query_prova$db);

        while(
    $row $mysql_fetch_array($result_elenco))
        {
            
    $row_elenco[] = $row;
        }
        return 
    $row_elenco;

    // RICHIAMO LA FUNZIONE E CICLO IL RISULTATO
    Codice PHP:
    $richiamo_funzione prova_query($db);

    foreach(
    $richiamo_funzione as $row_elenco)
    {
        echo 
    $row_elenco['id_record']."
    "
    ;


  3. #3
    Oppure devi richiamare $result_elenco senza eseguire il while nella funzione

    Codice PHP:
    function prova_query($db)
    {
    $query_prova  "
    SELECT * FROM nome_tabella_sql LIMIT 20
    "
    ;
    $result_elenco mysql_query($query_prova$db);

    return 
    $result_elenco;  // trasferisci il resource id# 
    }

    $res prova_query($db);
     
    while (
    $row_elenco mysql_fetch_array($res)) {

    echo 
    $row_elenco['id_record'] ."
    "
    ;


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Ciao Piero,
    grazie infinite per la risposta, in effetti in questo modo funziona correttamente.
    Grazie

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Originariamente inviato da piero.mac
    Oppure devi richiamare $result_elenco senza eseguire il while nella funzione

    Codice PHP:
    function prova_query($db)
    {
    $query_prova  "
    SELECT * FROM nome_tabella_sql LIMIT 20
    "
    ;
    $result_elenco mysql_query($query_prova$db);

    return 
    $result_elenco;  // trasferisci il resource id# 
    }

    $res prova_query($db);
     
    while (
    $row_elenco mysql_fetch_array($res)) {

    echo 
    $row_elenco['id_record'] ."
    "
    ;

    Io preferisco ritornare sempre un array invece che un result set quando chiamo una funzione che interagisce col database.

  6. #6
    Originariamente inviato da Alhazred
    Io preferisco ritornare sempre un array invece che un result set quando chiamo una funzione che interagisce col database.
    boh! bisogna sempre vedere cosa ne vuoi fare e qual'e' il limite che deve avere la funzione generalizzata. ho risposto cosi' perche' cosi' era la sua impostazione e non veniva a capo dell'errore. poi chiaramente e' una cosa didattica, con un select * che ne farebbe poi di una lista di id limitato sempre ai primi 20 se non per verificare solo com'e' il giro del fumo?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.