SQL Connectie

Status
Niet open voor verdere reacties.

Tijme

Gebruiker
Lid geworden
29 jan 2009
Berichten
535
Hoi,

Ik heb een vraagje over mijn sql class in php.

In mijn sql class zit de volgende constructor
PHP:
		public function __construct() {
			try {
				$this->connection = new PDO('sqlite:'. PATH_ROOT .'resources\database\database.db');
				$this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			} catch(PDOException $e) {
				$this->throwError('DB Connection', 'Could not connect to MySQL');
			}
		}

Nu roep ik mijn class telkens opnieuw aan in andere classes door de volgende regel code
PHP:
$sql = new sql;
Nu maakt hij dus ook de connectie opnieuw aan.

Nu wil ik een structuur hebben waardoor ik in elke class query's kan uitvoeren, maar niet de hele tijd opnieuw met de database hoef te connecten.
Ik zat zelf te denken aan een global variable te maken van mijn sql class. Dus zo:
PHP:
$sql = new sql;
$voorbeeld = new voorbeeld;
$voorbeeld2 = new voorbeeld2;

class voorbeeld {

    function voertQueryUit(){
          global $sql;
          $sql->query("select dingen");
    }

}

class voorbeeld2 {

    function voertQueryUit(){
          global $sql;
          $sql->query("select nog meer dingen");
    }

}

$voorbeeld->voertQueryUit();
$voorbeeld2->voertQueryUit();
Maar connect hij nu 3 keer met de database? Of connect hij een keer en gebruikt hij daarna die connectie in de 2 voorbeeld classes?
Ik hoop dat iemand mij kan helpen, of misschien een andere oplossing heeft om de database minder te belasten.

Mvg,
Tijme
 
Laatst bewerkt door een moderator:
Er wordt in dat tweede scenario volgens mij maar één verbinding aangemaakt. Maar, globale variabelen op deze manier gebruiken wordt over het algemeen afgeraden.* Wat, wellicht, beter is is zoiets als dit.
PHP:
$DB = new sql;

class probeersel{
    protected $DB;

    public function __construct($DB)
    {
        $this->DB = $DB;
    }

}

$test = new probeersel($DB);
Op die manier kan binnen de class probeersel de database worden aangesproken via $this->DB. Natuurlijk is dit niet de enige manier om de database door te geven. Als je een beetje rond gaat zoeken op internet kom je er veel verschillende meningen over tegen.

*Het kan namelijk, als ik het goed begrijp, gebeuren dat wat je in de ene klasse met de DB doet, effect heeft op alle andere. Als je het DB object via de constructor doorgeeft kan dat niet gebeuren.
 
Laatst bewerkt:
Waarom maakt je niet een static functie die de connectie geeft.
PHP:
static function GetInstance() {
if(!self::$db){
 self::$db = MakeConnection();
}
return self::$db;
}
Singleton setup
 
Laatst bewerkt door een moderator:
Ik zal het even uitproberen, ik heb het nu in ieder geval al werkend, ik zal de beste optie kiezen! :)
 
Kan je niet simpelweg pconnect gebruiken? Ik maak mijn codes een beetje anders
PHP:
<?php
mysql_pconnect (host, gebruikersnaam, wachtwoord); // wel tussen '' natuurlijk
?>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan