• User Attivo

    Query con PDO accedere agli attributi

    Buongiorno a tutti,
    forse il titolo è poco chiaro, quindi di seguito cerco di fornire maggiori dettagli.

    Devo poter eseguire una query con PDO in PHP.

    Ho una classe in php
    [PHP]
    class miaclasse {
    private $PDO;
    //PASSAGGIO DELLA CONNESSIONE public function __construct($PDOconn) { $this->PDO = $PDOconn; }

    public function estraiutente(){ try{
    //PREPARO ED ESEGUO LA QUERY ESEMPIO $iduser = 4; $query = "SELECT * FROM utenti WHERE id = :id"; $richiesta_query = $this->PDO->prepare($query); $richiesta_query->bindParam(":id",$iduser, PDO::PARAM_INT); $richiesta_query->execute();
    //CONTROLLO SE LA QUERY RESTITUISCE ALMENO UN RISULTATO if($richiesta_query->rowCount()==0){ throw new PDOException ("I Dati inseriti non RESTITUISCONO NULLA"); }
    //ARRAY ASSOCIATIVO PER CONFRONTO PASSWORD $record = $richiesta_query->fetch(PDO::FETCH_ASSOC); $utente = $record['id'];
    }catch(PDOException $e) { echo "<br />Message : ".$e->getMessage(); echo "<br />Message : ".$e->getline(); } //CATCH

    }
    [/PHP]

    Funziona, ma al di fuori della funzione, quindi all'esterno del programma ho bisogno di accedere alla variabile $utente e anche ad altre variabili che dovrei inserire nel programma. Non so come sia possibile farlo.
    Mi aiutate ?
    Grazie mille.


  • User Attivo

    Ciao,

    la variabile $utente è dentro il metodo estraiutente della classe miaclasse, fattela tornare con un semplice return

    [PHP]
    return $utente;
    [/PHP]

    se hai necessità di farti tornare più valori inseriscili in un array e fai il return dell'array.

    Nel titolo hai utilizzato la parola attributi, un attributo è una proprietà della classe che si solito si dichiara private (o protected), per accedervi dall'esterno quindi si crea un metodo pubblico (es. get) che ritorna il valore dell'attributo.

    Es.

    [PHP]
    private $id;

    public getId()
    {
    return $this->id;
    }
    [/PHP]


  • User Attivo

    Ciao ho scritto una funzione di tipo public che si trova dentro una classe.
    Allego foto perchè il forum non con i tag php non indenta il codice e diventa illegibile.

    image

    All'esterno della funzione, accedo così
    [PHP]
    //ESTRAPOLO INFORMAZIONI
    foreach($utente->estrapola_dati_utente_connesso($user_id_loggato) as $info_utente) {
    $qnome = $info_utente['nome'];
    $qemail = $info_utente['email'];
    }
    [/PHP]

    Esistono altri modi per semplificare o per migliorare l'accesso a questa function ?


  • User Attivo

    Ciao,

    puoi usare Pastebin per il codice https://pastebin.com/

    Le righe 65-75 sono inutili, ritorna direttamente $richiesta_query->fetch(PDO::FETCH_ASSOC); oppure lo assegni ad una variabile e la ritorni

    [PHP]
    $dati = $richiesta_query->fetch(PDO::FETCH_ASSOC);
    return $dati;
    [/PHP]

    All'esterno in questo caso non hai bisogno di un ciclo poiché hai selezionato una sola riga dal database (con la funzione fetch() di PDO)

    Quindi puoi utilizzare direttamente l'array in questo modo

    [PHP]
    $dati = $utente->estrapola_dati_utente_connesso($user_id_loggato);

    if ($dati) {
    echo $dati['nome'];
    }
    [/PHP]


  • User Attivo

    Non ho capito!
    Nel senso che ho selezionato un solo utente vero, ma devo estrapolare tutti i campi di quel singolo utente (Nome, Cognome, Città ....) per questo ho utilizzato l'array


  • User Attivo

    Non hai bisogno di ciclare l'array per accedere ai dati restituiti con la funzione fetch(), fai come il codice che ti ho postato.

    Il ciclo ti servirebbe nel caso utilizzassi la funzione fetchAll() che ritorna tutte le righe della tabella.