Archief - PDO connectie met DB

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

little

Legacy Member
Hey allemaal

Ik probeer me de laatste tijd te verdiepen in meer php/mysql. Ik lees heel veel, maar weet dat je vooral het meeste leert door het gewoon te schrijven, te doen.
Sommigen zullen dit wel als het wiel opnieuw uitvinden zien, maar ik leer echt massa's bij door dingen gewoon zelf te proberen te schrijven. De bedoeling is dat ik vooral classes etc meer ga gebruiken en onder de knie krijg.

Ik probeer nu om mijn mysql verbindingen met PDO te doen. Mijn class staat hieronder, maar wil nog niet werken. Iemand enig idee wat er fout is?

PHP:
class Database
{

	private $db_type;

	private $db_host;
	
	private $db_user;
	
	private $db_password;
	
	private $db_naam;

	/* Constructor */

	public function __construct($db_type, $db_host, $db_user, $db_password, $db_naam)
	{
		$this->type = $db_type;
		$this->naam = $db_naam;
		$this->host = $db_host;
		$this->password = $db_password;
		$this->user = $db_user;		
	}

	/* Connecteer met Database */

	private function connect()
	{
	
		try{
			$dsn = $this->type.':host='.$this->host.';dbname='.$this->naam.'';
			$db_connect = new PDO($dsn, $this->user, $this->password); 
			$db_connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			$db_connect->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
		}
		
		catch (PDOException $e) {
			echo 'PDO Exception: '.$e->getMessage();
		}
		
	}

		
}

Ik roep ze aan met

PHP:
$db = new Database('mysql', 'localhost', '****', '****', '****'); 

$sql = 'SELECT setting, inhoud FROM cms_settings';

foreach ($db->query($sql) as $row) {
    print $row['setting'] .' - '. $row['inhoud'] . '<br />';
}

Bv202

Legacy Member
Hey,

De bedoeling is dat ik vooral classes etc meer ga gebruiken en onder de knie krijg.
Hier gaat het mis. Blijkbaar heb je toch nog niet volledig door hoe OO werkt ;)

Eerst en vooral wordt je methode connect() nooit opgeroepen, waardoor er nooit een PDO-verbinding gemaakt wordt. Aangezien je deze verbinding waarschijnlijk meteen wilt maken bij het aanmaken van het Database-object, kan je de methode simpelweg oproepen vanuit de constructor:
PHP:
$this->connect();

De tweede fout is dat je PDO-object niet bijgehouden wordt, maar nadat de connect()-methode voltooid is, weer vernietigd zal worden. Wat je moet doen is dit object bijhouden als een data member zodat je deze kunt gebruiken in de query()-methode (welke overigens niet in je stuk code staat).

Een derde fout is dat je in je constructor enkele data members initialiseert, maar deze bestaan helemaal niet. Je data member noemt bijvoorbeeld $db_type, terwijl je $type probeert te initialiseren.

Fr3aK

Legacy Member
PHP:
class Database
{

    private $type;
    private $host;
    private $user;
    private $password;
    private $name;

    /* Constructor */

    public function __construct($db_type, $db_host, $db_user, $db_password, $db_name)
    {
        $this->type = $db_type;
        $this->name = $db_naam;
        $this->host = $db_host;
        $this->password = $db_password;
        $this->user = $db_user;
        $this->connect();
    }

    /* Connecteer met Database */

    private function connect()
    {
        try{
            $dsn = $this->type.':host='.$this->host.';dbname='.$this->name;
            $db_connect = new PDO($dsn, $this->user, $this->password); 
            $db_connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $db_connect->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
        }
        
        catch (PDOException $e) {
            echo 'PDO Exception: '.$e->getMessage();
        }
    }
}
Niet vergeten om uw query-methode ook nog te definiëren anders zal $db->query() ook ni veel doen ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan