Database class
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
14 reacties op 'Database class'
Gesponsorde koppelingen
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)
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)
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!
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!
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.
Dan hoef je daar als gebruiker niet aan te denken en wordt je overige php-code iets minder afhankelijk van de databaseversie.
- 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.
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.
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.
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.
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.
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.
@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.
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.
@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.
@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.
Quote:
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.Waarom zou je empty gebruiken het is een parameter.
Deze zijn altijd geset.
Deze zijn altijd geset.
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Mark Eilander- 5 jaar geleden
- 371 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP scripts opties
- Overig
- Nieuwste PHP scripts
- PHP script toevoegen


PHP hulp
0 seconden vanaf nu