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

    Valore di ritorno da un metodo di classe crea timeout

    Ho un problema piuttosto strano e non riesco a uscirne

    Sono all'interno della stessa classe.
    Il metodo "langs_id_by_short_in_array" richiama il metodo "lang_id_by_short", passandogli come parametro una semplice stringa. Dopo il return del valore, però, il server mi manda in timeout.

    Posto qui sopra i due metodi completi nel caso vi serva vedere qualcosa in particolare.
    Non è necessario che vi spieghi i passaggi, perché in verità debuggando ho visto che l'errore si trova esattamente quando richiamo il metodo e cioè:

    Codice PHP:
    $var_lang_id[] = $this->lang_id_by_short($value); 
    La variabile $value è una semplice stringa che vale "it" (ho fatto il die ed è esatta).
    Passandogli questo parametro, il metodo "lang_id_by_short" ritorna come valore "1", che è esattamente quello che deve fare (ho fatto il die di $row['id'] e mi butta fuori esattamente "1", che sarebbe l'id del record estratto dal database).
    Quindi prima di fare il return, il valore di $row['id'] è corretto.

    Ho provato a fare un die() prima e dopo il richiamo:

    Codice PHP:
    die($value); //qua il die funziona
    $var_lang_id[] = $this->lang_id_by_short($value);
    die(
    $value); //qua il die non viene più visto, quindi l'errore è esattamente qui sopra 
    Ho provato di tutto, ma non ne esco. I valori in input e output sono corretti, eppure mi blocca lo script. Qualche idea?


    Ecco qua i due metodi:


    codice:
    public function langs_id_by_short_in_array($var_lang = ''){
            
            if(empty($var_lang)){
                return false;
            }
            
            //array: splitto i campi contenenti le lingue in base alla virgola e agli spazi
            $var_lang_arr = $this->string_in_list($var_lang);
            
            //contiene gli id delle lingue passate
            $var_lang_id = array();
            
            foreach($var_lang_arr as $value){
                //id corrispondente alla lingua passata
                $var_lang_id[] = $this->lang_id_by_short($value);
            }
            
            return $var_lang_id;
            
        }

    codice:
    public function lang_id_by_short($short = '') {
            
            if(empty($short)){
                return false;
            }
            
            $result = $this->select( array( 'field'=>$this->fd['id'], 'number'=>1, 'where' => array($this->fd['short']."='".$short."'") ) );
            
            if($result){
                foreach($result as $result2){
                    $row = $this->db_row($result2);
                }
                return $row['id'];
            }
            
            return false;
    
    
        }

  2. #2
    Cosa fa il metodo "select" ?

    Metti un echo prima e dopo.

    $result contiene molte righe?


    Alberto
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  3. #3
    Ciao Alberto,

    il secondo echo (quello dopo il richiamo) non viene preso, perché il server mi va in timeout prima. Aggiungo che, invece di assegnare il risultato come elemento di array, ho provato anche ad assegnarlo a una semplice variabile String: stesso risultato.

    Il metodo select esegue una semplice query di estrazione da db. L'ho stampata a video e inserita manualmente nel db, funziona senza problemi ed estrae il record voluto. $result contiene un solo risultato (un solo record di database)...

  4. #4
    Perdonami, echo lo hai messo prima e dopo di $this->select​?
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  5. #5
    Sì, la select non mi dà problemi. L'ho anche stampata a video e inserita manualmente nel db, estrae i record senza errori.
    Ho fatto echo e die di tutte le variabili e array di entrambi i metodi, per cui sono piuttosto sicuro che si blocchi proprio in

    $var_lang_id[] = $this->lang_id_by_short($value);

    Il metodo "lang_id_by_short" sembra essere esatto: $row['id'] ha semplicemente il valore "1" e quindi il return dovrebbe buttare fuori "1". Il fatto è che se richiamo questo metodo nell'altro metodo, è come se non riuscisse a fare il return.
    E' la prima volta che mi capita una cosa del genere in anni di programmazione e non saprei neanche come debuggarla

  6. #6
    Il problema è qui:

    if($result){
    foreach($result as $result2){
    $row
    = $this->db_row($result2);
    }
    return $row['id'];
    }


    $row è una variabile che "vive" solo all'interno del ciclo foreach, l'hai definita lì dentro, non puoi fare return $row['id'] fuori dal ciclo.

    Prova così:

    if($result){
    foreach($result as $result2){
    $row
    = $this->db_row($result2);
    return $row['id'];
    }
    return false; // o meglio null
    }
    Ultima modifica di Albertorrr; 07-11-2013 a 11:00
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  7. #7
    Non me n'ero accorto
    Appena ho di nuovo accesso al codice lo sistemo.

    Intanto grazie per l'aiuto!

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.