Omdat ik niet zo heel lang met php werk en ik vorige week een MySQL database klasse deels heb gemaakt wil ik graag weten of het goed is, of er nog verbeter punten zijn of dat het gewoon slecht is en ik beter opnieuw kan beginnen.


<?php
	
	class database {
		
		
		public function __construct() {
			$this->dbhost = 'localhost';
			$this->dbuser = 'xxxx';
			$this->dbpass = 'xxxx';
			$this->dbconn = null;
		}
				
		/**
		 * Connectie maken met de MySQL database
		 */
		
		public function connect($dbname) {
			if(!$this->dbconn) {
				if (!$this->dbconn = mysql_connect($this->dbhost, $this->dbuser, $this->dbpass)) {
					throw new Exception('<p>Could not connect to the MySQL database!</p>');
				} else {
					if (!mysql_select_db($dbname)) {
						throw new Exception('<p>Could not find specified database!</p>');
					}
				}
			}
        }
				
		/**
		 * Query uitvoeren, return $result
		 */
		 
		public function query($sql) {
			if(!$result = mysql_query($sql, $this->dbconn)) {
				throw new Exception('<p>Could not execute query!  MySQL error:  ' . mysql_error()  . '</p> ');
			} else {
				return $result;
			}
		}

		/**
		 * Fetch assoc(array) doormiddel van de resultaten van de query
		 */
		 
		public function FetchAssoc($sql) {
			if(!$result = mysql_fetch_assoc($sql)) {
				throw new Exception('<p>Could not execute query!</p>');
			} else {
				return $result;
			}
		}
		
		/**
		 * Fetch row array doormiddel van de resultaten van de query
		 */
		 
		public function FetchRow($sql) {	
			if(!$result = mysql_fetch_row($sql)) {
				throw new Exception('<p>Could not fetch row!</p>');
			} else {
				return $result;
			}
		}
		
		/**
		 * Tel het aantal rijen in de resultaten van de query
		 */
		 
		public function NumRows($sql) {
			if(!$result = mysql_num_rows($sql)) {
				throw new Exception('<p>Could not count the number of rows!</p>');
			} else {
				return $result;
			}
		}
		
	}
	
?>
Je kan zeker wel verder bouwen waaraan je bezig bent.

Wat je je zelf moet afvragen, is wat je precies aan toegevoegde waarde hebt.
Zoals ik het nu zie, komt elk van jouw methodes overeen met 1 (niet OOP) functie.

De exeptions die je aanroept, zijn er nu meestal ook al, in de vorm van warnings.

Wanneer je er toe komt dat je minder schrijfwerk hebt buiten de klasse, heb je toegevoegde waarde.
Mocht je meer veiligheid bieden binnen de klasse, zodat je minder werk hebt buiten de klasse, heb je ook toegevoegde waarde.

Mij lijkt het dat je - voorlopig - niet veel meer doet dan mySQL functies vervangen door andere functies, maar dan met een -> .

1 voorbeeld: waarom zou je connect niet als private zetten en vanuit de constructor aanspreken. Je gaat toch geen database object aanmaken als je geen connectie zou maken?
Emmanuel Delay schreef op 18.06.2009 13:41
Je kan zeker wel verder bouwen waaraan je bezig bent.

Wat je je zelf moet afvragen, is wat je precies aan toegevoegde waarde hebt.
Zoals ik het nu zie, komt elk van jouw methodes overeen met 1 (niet OOP) functie.

De exeptions die je aanroept, zijn er nu meestal ook al, in de vorm van warnings.

Wanneer je er toe komt dat je minder schrijfwerk hebt buiten de klasse, heb je toegevoegde waarde.
Mocht je meer veiligheid bieden binnen de klasse, zodat je minder werk hebt buiten de klasse, heb je ook toegevoegde waarde.

Mij lijkt het dat je - voorlopig - niet veel meer doet dan mySQL functies vervangen door andere functies, maar dan met een -> .

1 voorbeeld: waarom zou je connect niet als private zetten en vanuit de constructor aanspreken. Je gaat toch geen database object aanmaken als je geen connectie zou maken?
bedankt voor je reply en dit is nog maar een basis en als ik meer vaardigheid krijg in php word deze zeker uitgebreid. Ik connect niet in mijn construct omdat ik connect en select database in 1 functie heb staan en via deze manier kies ik ook meteen de database
Bekijk dit bv. eens.

Voeg deze methode eens toe aan je klasse

<?php
public function select($sql, $db=null)
{
if ( ! empty($db) )
$this->connect($db);
if ( empty($this->dbconn) )
return false;
$res = $this->query($sql);
$rows = array();
for ($i = 0; $i < $this->NumRows($res); $i++)
$rows[] = $this->FetchAssoc($res);
return $rows;
}
?>

Dan kan je je klasse bv. zo gerbruiken
<?php
$m_db = new database();
$leden = $m_db->select ('SELECT * FROM phpbb3_users', 'forum_database');
?>

Zo'n functies zou je ook kunnen maken voor insert, update, ...

Nog een detail: hernoem de parameters $sql. Bv. je fetcht een recource, niet een sql string. Je zou de naam van die parameter dan ook beter $resource noemen.
Emmanuel Delay schreef op 18.06.2009 15:43
Bekijk dit bv. eens.

Voeg deze methode eens toe aan je klasse

<?php
public function select($sql, $db=null)
{
if ( ! empty($db) )
$this->connect($db);
if ( empty($this->dbconn) )
return false;
$res = $this->query($sql);
$rows = array();
for ($i = 0; $i < $this->NumRows($res); $i++)
$rows[] = $this->FetchAssoc($res);
return $rows;
}
?>

Dan kan je je klasse bv. zo gerbruiken
<?php
$m_db = new database();
$leden = $m_db->select ('SELECT * FROM phpbb3_users', 'forum_database');
?>

Zo'n functies zou je ook kunnen maken voor insert, update, ...

Nog een detail: hernoem de parameters $sql. Bv. je fetcht een recource, niet een sql string. Je zou de naam van die parameter dan ook beter $resource noemen.
bedankt voor je reply met dit kan ik ook wel wat en ik ga er nog even verder aan sleutelen :)
Nog iets.

Wat ik ook nog doe, is het volgende
<?php
function getDb()
{
if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1')
{
return array(
'de_database', // db
'127.0.0.1', // server
'root', // user
'*****' // pass
);
}
else
{
return array(
'de_database', // db
'mysql.*****.nl', // server
'de_user', // user
'******' // pass
);
}
}
?>

Zo kan je zowel de database gegevens op de server op op je eigen pc invullen in het zelfde script.

Ik denk, als je nu voort gaat op wat je hebt, en de tips die je kreeg, dat je nu echt iets met toegevoegde waarde zal kunnen maken.

Reageren