Cursussen/Courses Codesnippets     Top 
PHP - Database klasse


1. Configuratie
De database configuratie settings worden gedefiniƫerd in het 'dbconfig.php' bestand.
Je kan een 'user' en een 'password' opgeven om te lezen of te schrijven.
In de database klasse wordt een 'debugflag' constante gebruikt om al dan niet specifieke foutmeldingen te tonen.
Het 'dbconfig.php' bestand is vereist in de database klasse om een PDO connectie op te zetten.
In het voorbeeld is het configuratie bestand in dezelfde map als het klasse bestand gezet.
Je kan om veiligheidsredenen het bestand buiten de 'root' map plaatsen. Hierbij kan je gebruik maken van het voorvoegsel '$_SERVER[DOCUMENT_ROOT]/../'
<?php
// dbconfig.php
define('DB_WRITER', "root");
define('DB_WRITER_PASSWORD', "root");
define('DB_READER', "root");
define('DB_READER_PASSWORD', "root");
define('DB_DATABASE', "snippets");
define('DB_SERVER', "localhost");
define('DEBUGFLAG', "true");
?>


2. Database klasse
De database klasse bestaat uit een eigenschap '$conn' dat het connectie object bevat.
In de constructor (__construct) wordt het PDO connectie object aangemaakt en in de connectie eigenschap ($conn) geplaatst.
De parameters van de constructor methode (of functie) worden standaard opgevuld met de waarden uit het configuratie bestand.
Met de select_query methode wordt een eenvoudig SQL statement uitgevoerd.
In de query_prepared methode wordt het SQL statement eerst voorbereid (prepare) en bij de uitvoering worden de waarden in de voorziene plaatshouders ingevuld.
In de voorbeelden kan je zien hoe je de database klasse kunt gebruiken in jouw scripts.
<?php
// database.php
require "dbconfig.php";

class database {
	private $conn;
	
	function __construct($host = DB_SERVER, $dbname = DB_DATABASE, 
						 $user = DB_READER, $password = DB_READER_PASSWORD) {
		try {
			$conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
			$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			$this->conn = $conn;
		}
		catch(PDOException $e)
		{
			if (DEBUGFLAG === "true") {
				echo "<div><b>Error: " . $e->getmessage() . "</b></div><br>\n";
			} else {
				echo "<div><b>Error: database error (1).</b></div><br>\n";
			}
			return -1;
		}	
	}
	public function select_query($sql) {
		try {
			return $this->conn->query($sql);			
		}
		catch(PDOException $e)
		{
			if (DEBUGFLAG === "true") {
				echo "<div><b>Error: " . $e->getmessage() . "</b></div><br>\n";
			} else {
				echo "<div><b>Error: database error (2).</b></div><br>\n";
			}
			return -1;			
		}
	}
	public function query_prepared($sql, $values) {
		try {
			$stmt = $this->conn->prepare($sql);
			$stmt->execute($values);
			//var_dump($stmt);
			return $stmt;
		}
		catch(PDOException $e)
		{
			if (DEBUGFLAG === "true") {
				echo "<div><b>Error: " . $e->getmessage() . "</b></div><br>\n";
			} else {
			    echo "<div><b>Error: database error (3).</b></div><br>\n";
			}
			return -1;			
		}
	}
}
?>


3. Een lijst maken
In dit eerste voorbeeld wordt een eenvoudige (niet opgemaakte) lijst getoond van de records uit een tabel.
Met een 'foreach' lus wordt elk record uit het resultaat ($result) opgehaald en getoond.
// make a list using the database class
require("database.php");
if (!isset($db)) $db = new database();
$sql = "SELECT * FROM category LIMIT 10";	// the first 10 records
$result = $db->select_query($sql);
foreach($result->fetchAll() as $rec) {
	// form.php will use the record id for changing or removing the record
	echo "<a href='form.php?id=".$rec["id"]."&action=change'>change</a> ";
	echo "<a href='form.php?id=".$rec["id"]."&action=remove'>remove</a> ";
	echo $rec["id"] . " " . $rec["name"] . "<br>";
}


4. Een record zoeken
In dit tweede voorbeeld wordt een specifieke record uit de database tabel opgehaald.
Het 'id'-veld werd 'hardgecodeerd' maar komt meestal uit een url-variabele.
// search for a record using the database class and a record id
require("database.php");
if (!isset($db)) $db = new database();
$id = 4; 	// usually set as a url variable in a list (see above)
$sql = "SELECT * FROM category WHERE id = :id";
$values = array(':id'=>$id);
$result = $db->query_prepared($sql,$values);
$rec = $result->fetch();	// maximum one record possible
if (isset($rec)) echo "Record found: " . $rec["id"] . " " . $rec["name"];


5. Een record toevoegen
Derde voorbeeld: een record wordt toegevoegd aan een bestaande database tabel.
Het resultaat wordt daarna gecontroleerd.
// insert a record using the database class
require("database.php");
if (!isset($db)) $db = new database();
$id = null;	// must be null when inserting (primary key - auto increment)
$name = "test category";
$active = 0;
$sql = "INSERT INTO category (id, name, active)";
$sql .= " VALUES (:id, :name, :active)";
$values = array (':id' => $id, ':name' => $name, ':active' => $active);
$result = $db->query_prepared($sql, $values);
if ($result->rowCount() > 0) {
	echo "Record with name = " . $name . " inserted.<br><br>";
} else {
	if ($result->rowCount() == 0) {
		echo "No data was changed.<br>";
	} else {
		echo "Error.<br>";
	}
}
echo $sql . "<br>";
var_dump($values);
echo "Number of records affected: " . $result->rowCount();