connettersi correttamente al db mysql

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
In un tutorial online ho visto questo codice per effettuare correttamente una connessione a mysql tramite una classe (qui nn inserito ancora come file esterno e non ho usato il soppressore degli errori @ davanti a mysql_connect)

Codice:
<?php
class MysqlClass
{
  // parametri per la connessione al database
  private $nomehost = "localhost";     
  private $nomeuser = "username";          
  private $password = "password"; 
         
  // controllo sulle connessioni attive
  private $attiva = false;

  // funzione per la connessione a MySQL
  public function connetti()
  {
   if(!$this->attiva)
   {
    $connessione = mysql_connect($this->nomehost,$this->nomeuser,$this->password);
       }else{
        return true;
       }
    }
}       
?>
La funzione utilizza delle variabili private per fare in modo che queste possano essere disponibili solo all'interno della classe; la variabile $attiva è il controllore della connessione e fin qui tutto bene ma non capisco bene il metodo connetti(); in quanto mi controlla se non esiste una connessione e quindi ne crea una
(ovviamente con $var->connetti() );

ma per quale motivo

Codice:
else{return true;}
nn capisco il senso di farmi ritornare il valore true :dipser:
 

dream88

Utente Attivo
8 Apr 2009
62
0
0
A quanto ne so... e spero di non sbagliare... Non ti crea una nuova connessione ma permette di connetterti al database con quel dato nome, quella data password che hai specificato prima. E se la connessione è avvenuta giustamente ti restituisce true per avvisarti che ha funzionato...
 

dream88

Utente Attivo
8 Apr 2009
62
0
0
Scusa ho sbagliato.. ti restituisce true se la connessione è già attiva... In caso non lo fosse ti collega!
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Quella classe mi sembra familiare :)
Confermo quello che ha detto Dream dato che se non mi sbaglio dovrei averla creata io :)
 

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
Allora perdonate la mia insistenza e testardagine nel capire...(ma sono curioso):

Il metodo viene richiamato quando creo l'istanza ad esempio:

$x=new MysqlClass;
$x->connetti()

quando il metodo si attiva, questo provoca la connessione se la connessione non va restituisce true e quindi tenta di ripetere il metodo?

In sostanza la domanda è:(rullo di tamburi....)

: se non ci fosse else{return true;} cosa succede o meglio cosa non succede?

p.s. per eliox: sei Claudio cioè quello che ha fatto l'intera guida
"Guida PHP e MySql pratica" ? :tifoso:
 

dream88

Utente Attivo
8 Apr 2009
62
0
0
quando il metodo si attiva, questo provoca la connessione se la connessione non va restituisce true e quindi tenta di ripetere il metodo?
No ti restituisce true se la connessione è già attiva...

se non ci fosse else{return true;} cosa succede o meglio cosa non succede?
Se la connessione è già attiva e tu levi l'else non sai se era già attiva oppure no...
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
p.s. per eliox: sei Claudio cioè quello che ha fatto l'intera guida
"Guida PHP e MySql pratica" ? :tifoso:
Ecco perché quella classe mi sembrava familiare:)

Prova a vederla in questo modo:
PHP:
// funzione per la connessione a MySQL
  public function connetti()
  {
   // se la connessione non è attiva..
   if(!$this->attiva)
   {
   // stabilisci la connessione
    $connessione = mysql_connect($this->nomehost,$this->nomeuser,$this->password);
       }else{
    // diversamente restituisci la connessione come attiva 
        return true;
       }
    }
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
un piccolo dubbio
1. se la connessione è attiva la riga
$connessione = mysql_connect($this->nomehost,$.....
non viene eseguite e ritorna true
e sin qui ok
2. se la connessione non è attiva la riga
$connessione = mysql_connect($this->nomehost,$.....
viene eseguita
ma se per qualche accidente la connessione non avviene?
se per es. sbagliando scrivo
private $password = "pssword";
al posto di
private $password = "password"; ?
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
23
Roma
alessandro1997.netsons.org
Io solitamente uso qualcosa del genere, anche se un po' più raffinato:
PHP:
<?php
class database
{
	private $conn;
	
	public function connect($dbhost, $dbuser, $dbpass, $dbname, $dbport = 3306)
	{
		$this->conn = @mysql_connect("{$dbhost}:{$dbport}", $dbuser, $dbpass);
		
		if(!$this->conn)
			die('Errore durante la connessione: <b>'. mysql_error() .'</b>');
		
		return true;
	}
	
	public function query($sql)
	{
		$query = @mysql_query($sql, $this->conn);
		
		if(!$query)
			die('Errore nella query SQL <b>'. $sql .'</b>: <b>'. mysql_error() .'</b>');
		
		return $query;
	}
	
	public function rows($query = false)
	{
		if(!$query)
			$rows = @mysql_affected_rows($this->conn);
		else
			$rows = @mysql_num_rows($query);
		
		return $rows;
	}
	
	function assoc($query)
	{
		$assoc = @mysql_fetch_array($query);
		return $assoc;
	}
	
	function close()
	{
		$close = @mysql_close($this->conn);
		
		if(!$close)
			die('Errore durante la disconnessione: <b>'. mysql_error() .'</b>');
		
		return true;
	}
}
?>
 

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
anzi... ma se la connessione non avviene per qualche motivo perchè dovrebbe risultare attiva?
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
ma se la connessione non avviene per qualche motivo perchè dovrebbe risultare attiva?
infatti era questo il mio dubbio
se non è attiva viene eseguita la riga tra
if(!$this->attiva)
{

ed }else{
ed il programma prosegue sia che la connessione sia avvenuta sia che non sia avvenuta
se non avvenuta e trovo un, es.,
$query=mysql_query("SELECT..........
la riga mi da errore
per questo l'errore di connessione sarebbe da intercettare prima
 

MarcoGrazia

Utente Attivo
15 Dic 2009
788
16
18
59
Udine
www.stilisticamente.com
ciao


1. eliox è cresciuto di 5 cm
2. secondo me questa si chiama "leccata":D
C'hai preso :D non ha più risposto dalla slecchinata :D

Emanuele ti do un consiglio, smolla mysql_ e prova con le improved (mysqli_) o meglio ancora iniziati a studiare l'astrazione dei PDO.
Motivi essenziali: le improved sono sostanzialmente più veloci delle vecchie funzioni di mysql_ e soprattutto possono essere usate efficacemente come metodi di classi.
Inoltre il loro supporto è in continua espansione presso PHP, mentre per le vecchie... ciccia soprattutto da parte di MySQL che già dalla versione 5 (parlo del server di database non del PHP) non le supporta a pieno.
Dato che sui server oramai la versione 4 del database non si trova più e se la trovi scappa a gambe levate non ti consiglio di continuare ad usare questa estensione.
Prova a passare alle improved, qui trovi un semplice tutorial Tutorial scritto da una scuola di Rieti.
Se poi il PHP è o sarà, come spero, il tuo lavoro passa decisamente a PDO che implementa un metodo di astrazione in grado di passare immediatamente da MySQL a qualsiasi altro sistema di database con pochissimi passaggi e senza dover modificare il vecchio codice, se non nelle query.
Infine è molto più sicuro nelle transazioni di mysql_

Esempio su PDO
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Adesso vi banno tutti così la smettete di parlare alle mie spalle :D
Per chi fosse interessato ad un approfondimento relativamente ad una valida alternativa alle funzioni mysql based è stata pubblicata di recente su questo sito una mini guida su mysqli