Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99

    Problema oggetto connessione Db

    Salve
    Da un paio di giorni sto cercando di capire la programmazione ad oggetti, visto che programmo in maniera diversa (con funzioni ma senza classi).
    Dopo diverse letture ho tentato di fare una prima classe che mi permetti di interfacciarmi ad un DB ed ho un problema (credo anche stupido).
    Vi posto il codice:
    codice:
    class ConnessioneDb {
            private $host='';
    	private $hostuser='';
    	private $hostpass='';
    	private $hostdatabase='';
    	
    //funzione per eseguire la connessione	
    	public function connetti() {
    			$conn=mysqli_connect ($this ->host, $this ->hostuser, $this ->hostpass, $this ->hostdatabase) or die (mysql_error());
    			if (!$conn) {
    				die("mysqli_connect fallita: ". mysqli_connect_error());
    				exit();
    			} 
    	}
    	
    //funzione per l'esecuzione delle query
    	public function query($sql) {
      			$risultato = mysql_query($sql) or die (mysql_error());
     			return $risultato;
     	}
    //funzione per la disconnessione
    	public function disconnetti() {
            if($this->attiva) {
                 if(mysql_close()) {
             		$this->attiva = false;
                 	return true;
                 }else{
                     return false;
                 }
            }
     	}
    
    
    }
    Infine includo questa "libreria" nella mia pagina:
    codice:
    include 'lib.php';
    // istanza della classe
    $connessione= new ConnessioneDb();
    // chiamata alla funzione di connessione
    $connessione-> connetti();
    // Query
    $connessione->query("SELECT * FROM utenti WHERE ID='1'");
    // chiamata alla funzione di disconnessione
    $connessione->disconnetti();
    Eseguo questa pagina (logicamente con i dati giusti di connessione), e mi da l'errore
    "Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL ser...."
    Quindi come se all'esecuzione della funzione query() non son connesso al DB.
    Come mai se prima ho lanciato la funzione connetti()?

    Credo che per gli esperti sia na stupidata, io che son al 2 giorni di letture sugli oggetti sarei interessato a capire dove sbaglio.
    Grazie anticipatamente

  2. #2

    Re: Problema oggetto connessione Db

    Originariamente inviato da cadan2
    codice:
    ...
      			$risultato = mysql_query($sql) or die (mysql_error());
    ...
    Cosa centra mysql_query con mysqli ?!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99
    in che senso scusa?

  4. #4
    mysql e mysqli sono estensioni differenti, tu nel tuo codice utilizzi l'estensione mysqli per inizializzare la connessione e quella mysql per effettuare la query.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99
    Ah ho capito, quindi se utilizzo mysqli per iniz. la connessione dovrò usare sempre quella in futuro.
    Ho fatto un tentativo modificando la funzione query cosi:
    codice:
    public function query($sql) {
      			$risultato = $conn->query($sql) or die (mysql_error());
    			$riga=$risultato->fetch_array();
    			echo $riga['nome'];
     	}
    e quando eseguo mi da un errore:
    "Fatal error: Call to a member function query() on a non-object in..."

    però se invece sposto $conn con l'nizializzazione della connessione in questa funzione, funziona tutto e mi da il valore del NOME, ecco di seguito:

    codice:
    public function query($sql) {
                            $conn=mysqli_connect ($this ->host, $this ->hostuser, $this ->hostpass, $this ->hostdatabase) or die (mysql_error());
      			$risultato = $conn->query($sql) or die (mysql_error());
    			$riga=$risultato->fetch_array();
    			echo $riga['nome'];
     	}
    In cosa sbaglio facendo le 2 funzioni separate?
    sto alle prime armi con gli oggetti e vorrei capire per bene!
    Grazie Ancora

  6. #6
    Perchè l'attributo $conn non è dichiarato all'interno del metodo query() in quanto esso viene inizializzato nel metodo connetti() e la sua visibilità si limita ad esso.

    Dovresti fare così:

    Codice PHP:
    class ConnessioneDb {
            private 
    $host='';
        private 
    $hostuser='';
        private 
    $hostpass='';
        private 
    $hostdatabase='';

            private 
    $conn;
        
    //funzione per eseguire la connessione    
        
    public function connetti() {
                
    $this->conn=mysqli_connect ($this ->host$this ->hostuser$this ->hostpass$this ->hostdatabase) or die (mysql_error());
                if (!
    $this->conn) {
                    die(
    "mysqli_connect fallita: "mysqli_connect_error());
                    exit();
                } 
        }
        
    //funzione per l'esecuzione delle query
        
    public function query($sql) {
                  
    $risultato $this->conn->query($sql) or die (mysql_error());
                
    $riga=$risultato->fetch_array();
                echo 
    $riga['nome'];
         }
    ... 
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    99
    Ah eccooo
    ma lo sai che c'avevo pensato e avevo pure provato a mettere nelle dichiarazioni
    Codice PHP:
    private $conn
    però avevo rimasto nella funzione query
    Codice PHP:
     $risultato $conn->query($sql) or die (mysql_error()); 
    per questo nn mi andava.
    Ora funziona

    Grazie mille Satifal sei stato gentilissimo!
    Eh scusa per l'ignoranza con gli oggetti xD
    Credo che ci dovrò ancora sbatter la testa per un bel pò su sto libro (PHP5)

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.