Database class

Door Mark Eilander, 20 jaar geleden, 4.370x bekeken

Deze classe heb ik geschreven voor mijn Opleiding bij Eduvision.
De PHP Masterclass.

Ik post hem hier voornamelijk om te kijken of er nog op en/of aanmerkingen zijn op dit script.

Als mensen hiervan kunnen leren is dat alleen maar meegenomen.

Gesponsorde koppelingen

PHP script bestanden

  1. database-class

 

Er zijn 14 reacties op 'Database class'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Citroen Anoniem Graag
Citroen Anoniem Graag
20 jaar geleden
 
0 +1 -0 -1
Hmm, wat me opvalt is het volgende: met de functe __set kan je alle variabele een waarde mee geven. Vervolgs als je een verbinding wilt maken, moet je die variabelen nog een keer meegeven. Het lijkt mij mooier dat hij eerst kijkt of ze al geset zijn. Is dit niet het geval dat ie dan kijkt wat er aan parameters met de connect functie is binnengekomen.

Verder hebben we al veel van dit soort classes. Wat voegt deze extra toe?
En bovendien hebben we ook nog pdo. :)

Ik mis nog een functie als mysql_real_escape_string achtig iets een soort protect functie dus.

Ik hoop dat je er iets mee kan
En je mag wel wat meer met exeptions gooien. Bijvoorbeeld als het connecten niet goed gaat. Het is de bedoeling dat de classe het werk een beetje overneemt, want nu moet je alsnog controleren of de connectie is gelukt.

Ook zeer benieuwd wat dit toevoegd: classes/main_inc.php (die include aan het begin)
Mark Eilander
Mark Eilander
20 jaar geleden
 
0 +1 -0 -1
Die main_inc is de __autoload functie, zodat ik niet alle classes die ik gebruik hoef toe te voegen. bij de database classe kan die link eigenlijk weg.

Ik ken PDO en gebruik het zelf ook, maar moet deze classe maken, zodat ik laat zien dat ik het classe verhaaltje snap.

Dat van de exceptions, en de sql-injection ga ik nog toevoegen.
En ga even lezen wat dat __set en __get eigenlijk doet.

Ik kan weer verder, bedankt!
Joren de Wit
Joren de Wit
20 jaar geleden
 
0 +1 -0 -1
Echo's vanuit een klasse zijn niet netjes (in je __set methode bijvoorbeeld). Als er iets fout gaat, gooi dan een exception...
Frank -
Frank -
20 jaar geleden
 
0 +1 -0 -1
Wanneer je MySQL wilt gebruiken, stel dan bij het aanmaken van het object ook direct de juiste mode in. Dit is (helaas) ook weer afhankelijk van de MySQL-versie, maar ook dat kun je vrij eenvoudig in je database-classe afhandelen.

Dan hoef je daar als gebruiker niet aan te denken en wordt je overige php-code iets minder afhankelijk van de databaseversie.
PHP Newbie
PHP Newbie
20 jaar geleden
 
0 +1 -0 -1
- if ($p_sValue != ""),
Daar hebben we de functie empty voor.

- $m_sResult = @mysql_query($m_sQuery);
Altijd controleren of een query gelukt is, en nooit foutmeldingen onderdrukken met een @.

- Hetzelfde geldt voor de functies die eronder staan.

- Laat de query door de classe onthouden ($this->query). Dan kun je in de fetch classe deze variabele weer gebruiken en hoef je het query resultaat niet mee te geven aan de functie.
Mark Eilander
Mark Eilander
20 jaar geleden
 
0 +1 -0 -1
Blanche,

Als ik een exception gooi in die __set, dan krijg ik een foutmelding dat hij de exception niet kan catchen.
Fatal error: Uncaught exception 'MyException' with message 'test' in C:\AppServ\www\Masterclass Eindopdracht\classes\Database.class.php:70 Stack trace: #0 C:\AppServ\www\Masterclass Eindopdracht\index.php(29): Database->__set('sName', '') #1 {main} thrown in C:\AppServ\www\Masterclass Eindopdracht\classes\Database.class.php on line 70


PHP Newbie,

De @ zijn verwijderd.

Alles in deze classe is nieuw voor me, dus probeer nu zoveel mogelijk te leren.


20 jaar geleden
 
0 +1 -0 -1
mysql_* is uitgerangeerd in PHP6, berijdt je voor op de toekomst gebruik mysqli of pdo, beide zijn tevens al als object/class beschikbaar.

return wordt doorgaans met een kleine letters geschreven
Bo az
Bo az
20 jaar geleden
 
0 +1 -0 -1
Ik vind het niet zo netjes dat je de gebruikersnaam en wachtwoord (etc.) als eigenschappen van de klasse gefineerd. Je heb deze namelijk alleen nodig voor de connectie en daarna kan je ze weer vergeten.

Overigens ben ik het niet geheel met PHP Newbie eens dat je geen @-tjes mag gebruiken, nu krijg je namelijk dat je foutmeldingen kan krijgen waar je in oo code niet zoveel mee kan en dus krijg je soms lelijke pagina's die pas half af zijn met een foutmelding. Ik zou er dan persoonlijk nog voor kiezen om een niets zeggende exception te gooien, die kan je nog netjes afhandelen.
Er zijn overigens vele oplossingen, je zou ook met set_error_handler aan de gang kunnen.
PHP Newbie
PHP Newbie
20 jaar geleden
 
0 +1 -0 -1
@boaz,

Ik bedoel ook niet dat je helemaal geen @-tjes mag gebruiken. Ik gebruik ze soms (lees: zelden) ook wel eens (bijvoorbeeld bij een image upload script waarbij je @imagesize() gebruikt als afbeeldings check).

Ik doelde erop dat je geen @-tjes neer moet zetten om foutmeldingen te verbergen, die je niet op een andere manier controleert. Dus wanneer de query netjes in een if/else combinatie zet, dan kun je inderdaad een @ neerzetten, maar op deze manier krijg je het nooit te weten wanneer een query is mislukt en is het in deze situatie dus fout gebruikt.
HaasOnline XX
HaasOnline XX
20 jaar geleden
 
0 +1 -0 -1
@Webmakerij: Dat mysql dadelijk uit PHP6 ligt is juist het mooie van gebruik van classes. Ja hoeft niet zoveel aan te passen om de boel weer werkend te krijgen.

@mark: Je script is netjes en duidelijk. ik heb het niet getest, maar als ik je een tip mag geven dan zou ik je aanraden om een mooie interface aan het begin van de class te plaatsen. Dan is het wat duidelijker welke functies beschikbaar zijn binnen je class zelf.

Ook zou ik je aanraden om niet je username en password op te geven in je functie aanroep. Gebruik een class extends voor het ophalen van deze instellingen. Als je ooit eens je wachtwoord wijzigt dan moet je je hele code doorlopen om de wijziging door te voeren. Trouwens wel netjes dat je bij destruct de recordset een opruimt. Het is alleen handig (maar langzamer) als je steeds het database object maakt. Persoonlijk herbruik ik steeds mijn object voor snelheidswinst.
Iltar van der berg
iltar van der berg
20 jaar geleden
 
0 +1 -0 -1
"De PHP Masterclass."

Zo masterlijk vind ik em anders niet...
Martijn B
Martijn B
20 jaar geleden
 
0 +1 -0 -1
Quote:
- if ($p_sValue != ""),
Daar hebben we de functie empty voor.


Waarom zou je empty gebruiken het is een parameter.
Deze zijn altijd geset.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if( !$p_sValue )
{
}

?>


Werkt precies hetzelfde.
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
Quote:
Waarom zou je empty gebruiken het is een parameter.
Deze zijn altijd geset.
Nu verwar jij empty() met isset(). Hij zegt ook niet dat je er een isset() tussen moet plaatsen, maar een empty() in plaats van checken op lege string. Ook 0 of false komt er dan dus niet doorheen. Wat jij zegt kan inderdaad ook, maar is niet zo netjes.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Martijn B
Martijn B
20 jaar geleden
 
0 +1 -0 -1
Als een variabele bestaat (geset is) dan is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if( empty($variabele) )

// Het zelfde als:

if( !$variabele )
?>


Waarom zou dit niet zo netjes zijn, als je zeker weet dan $variabele bestaat?
En je gebruikt een functie minder.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. database-class

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.