Ik heb een tijdje geleden een database klasse geschreven, maar ik ben nog niet helemaal tevreden over hoe deze werkt. o.a. de foutafhandeling.
Zou iemand mij kunnen helpen met wat verbeteringen in het script?
De code:
<?php
class database {
private $_handle;
public function connect() {
global $conf;
$dbHost = $conf->dbHost;
$dbUser = $conf->dbUser;
$dbPassword = $conf->dbPassword;
$dbName = $conf->dbName;
$this->_handle = mysql_connect($dbHost,$dbUser,$dbPassword); // connect to the database and store the handle in the public member 'handle'.
if(!is_resource($this->_handle)){
// The result is not a valid resource. connection must have failed.
die("Unable to connect to database.");
}
mysql_select_db($dbName, $this->_handle) or die(mysql_error()); // select the database we need to use.
}
public function disconnect() {
mysql_close($this->_handle); // close the database connection
}
public function query($query) {
if(!is_string($query) || strlen($query) == 0){
throw new Exception("Invalid query!");
}
$returnValue = mysql_query($query);
if(!is_resource($returnValue) && $returnValue != 1){
// The result is not a valid resource. query.
die("Error in query.<br />Returned value: ".$returnValue."<br />Error returned was: ".mysql_error()."<br />Occured in: ".$query);
}
return $returnValue;
}
}
?>
Ik om er zelf niet veel verder mee dus alle hulp is welkom.
Zoiets?
<?php
interface Database
{
public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam);
public function query($query);
}
interface DatabaResult
{
public function fetch_assoc();
public function fetch_alles();
public function aantal_regels();
}
class MySQL implements Database
{
private $connectie;
public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam)
{
}
public function query($query)
{
}
}
class MSSQL implements Database
{
private $connectie;
public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam)
{
}
public function query($query)
{
}
}
class PostgreSQL implements Database
{
private $connectie
public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam)
{
}
public function query($query)
{
}
}
class MySQLResult implements DatabaseResult
{
private $resultaat;
public function fetch_assoc()
{
}
public function fetch_alles()
{
}
public function aantal_regels()
{
}
}
class MSSQLResult implements DatabaseResult
{
private $resultaat;
public function fetch_assoc()
{
}
public function fetch_alles()
{
}
public function aantal_regels()
{
}
}
class PostgreSQLResult implements DatabaseResult
{
private $resultaat;
public function fetch_assoc()
{
}
public function fetch_alles()
{
}
public function aantal_regels()
{
}
}
?>
Exeption
<?php
class DatabaseException extends Exception
{
}
?>
MySQLResult
<?php
class MySQLResult implements DatabaseResult
{
private $resultaat;
public function __construct($resultaat)
{
$this->resultaat = $resultaat;
}
public function fetch_assoc()
{
return mysql_fetch_assoc($this->resultaat);
}
public function fetch_alles()
{
$resultaat = array();
while($regel = $this->fetch_assoc())
{
$resultaat[] = $regel;
}
return $resultaat;
}
public function aantal_regels()
{
return mysql_num_rows($this->resultaat);
}
}
?>
MySQL klasse implementeren
<?php
class MySQL implements Database
{
private $connectie;
public function maak_verbinding($host, $gebruikersnaam, $wachtwoord, $naam)
{
if(!($this->connectie = mysql_connect($host, $gebruikersnaam, $wachtwoord)))
throw new DatabaseException('Kon geen verbinding maken');
if(!mysql_select_db($naam, $this->connectie))
throw new DatabaseException(mysql_error());
}
public function query($query)
{
$resultaat = mysql_query($query, $this->connectie);
if(!$resultaat)
throw new DatabaseException(mysql_error());
Zou er persoonlijke voor kiezen om de namen engels te houden, en nogmaals, mysqli te gebruiken omdat de mysql extensie niet meer zal worden geupdate =)
wow... dat is wel iets meer hulp dan ik om gevraagd had zeg. ziet er netjes uit maar ik wil idd de namen engels houden.
Ik zal eens kijken of dit gemakkelijk te implementeren is in mijn sites. Ik zal ook mysqli gaan gebruiken, bedankt voor de tip.
Niels, mag ik dat script gewoon vrij gebruiken, aanpassen en onder GNU/GPL distribueren??