PDO-MySQL Database Class

Door Roland van Wanrooy, 20 jaar geleden, 12.464x bekeken

Na het lezen van de duidelijke tut van Blanche over PDO wil ik graag een duit in het zakje doen met een database class, die ik naar mijn beste weten en kunnen op PDO heb gebaseerd.

Uiteraard zal er het nodige aan mankeren; ik hoor het dan graag, zodat ik de class kan verbeteren.

De rar staat op http://rjm.be/dropzone/class.db.rar

Bedankt alvast,
Roland

Gesponsorde koppelingen

PHP script bestanden

  1. pdomysql-database-class

 

Er zijn 15 reacties op 'Pdomysql database class'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Simon Blok
Simon Blok
20 jaar geleden
 
0 +1 -0 -1
Waarom een extra class als PDO al een class is?
Als je er extra functies bij wil kun je jouw class beter PDO laten extenden.
Iltar van der berg
iltar van der berg
20 jaar geleden
 
0 +1 -0 -1
Beetje een nutteloze class. PDO is al niet mooi, en dan dit. Echo's in methodes, geen Abstraction layer, want dit is alleen pure mysql(i) en errors handel je af met exceptions, niet messages.
Roland van Wanrooy
Roland van Wanrooy
20 jaar geleden
 
0 +1 -0 -1
@Saimen: dank je, da's inderdaad een betere oplossing.
@iltar: ik begrijp je niet, maar dat zal aan mij liggen :)
- De errors wórden afgevangen met exeptions...
- Er is één method, die een melding op het scherm brengt en dus echoet. Ik begrijp van jou dat dit niet mag, maar ik weet niet hoe er anders een melding op het scherm moet komen.
- alleen pure mysql... sorry, maar ik zie niet helemaal wat daar mis mee is.
Wel ga ik de raad van Saimen opvolgen.
Iltar van der berg
iltar van der berg
20 jaar geleden
 
0 +1 -0 -1
Quote:
- De errors wórden afgevangen met exeptions...

Ja, sorry keek verkeerd -> zie debug_backtrace() voor jou errors die je nu opbouwd.

Quote:
- Er is één method, die een melding op het scherm brengt en dus echoet. Ik begrijp van jou dat dit niet mag, maar ik weet niet hoe er anders een melding op het scherm moet komen.

Daar kan je oa de __ToString() voor gebruiken. Hierbij doel ik vooral op het bovenstaande, je gooit wel exceptions, maar die los je op binnen de class. Hier kan je beter een exception handler voor maken, of gewoon de try/catch correct gebruiken (je wilt niet intern de errors afhandelen)

Quote:
- alleen pure mysql... sorry, maar ik zie niet helemaal wat daar mis mee is.

Is ook helemaal niets mis mee. Maar waarom zou je dan iets met PDO doen?

Quote:
http://nl2.php.net/manual/en/intro.pdo.php
PDO provides a data-access abstraction layer, which means that, regardless of which database you're using, you use the same functions to issue queries and fetch data


Als je zelf een classe wilt maken, moet je dat doen specifiek voor mysql of een mysqli wrapper maken. PDO is zowizo al erg onhandig, maar valt wel te gebruiken als DBAL (waar het voor is bedoelt). Hier weet je welke DB engine je gebruikt, dus is het nut van een DBAL weg..
PHP Newbie
PHP Newbie
20 jaar geleden
 
0 +1 -0 -1
@Iltar

PDO is een mooie klasse om mee te werken, maar PDO wil je niet gebruiken zodat je gemakkelijk kunt switchen tussen databases. Wanneer je een script namelijk zó bouwt dat je verschillende databases kunt gebruiken (Mysql, PostgreSQL, enz) dan maak je nooit optimaal gebruik van de capaciteiten van een database.
Iltar van der berg
iltar van der berg
20 jaar geleden
 
0 +1 -0 -1
Quote:
PDO is een mooie klasse om mee te werken, maar PDO wil je niet gebruiken zodat je gemakkelijk kunt switchen tussen databases. Wanneer je een script namelijk zó bouwt dat je verschillende databases kunt gebruiken (Mysql, PostgreSQL, enz) dan maak je nooit optimaal gebruik van de capaciteiten van een database.


Klopt helemaal. Maar zelfs als je dat wel deed, kan je beter zelf wat maken dan PDO gebruiken :)
Jesper Diovo
Jesper Diovo
20 jaar geleden
 
0 +1 -0 -1
Dus als ik het goed begrijp kan deze class PDO vervangen? Ben al een tijdje op zoek naar zoiets, omdat ik mijn site helemaal PDO wil maken, alleen mijn host ondersteunt PDO nog niet. Dus had ik bedacht tijdelijk een andere class die precies hetzelfde werkt als PDO te gebruiken, alleen ben zelf niet zo bedreven in OOP.
Robert Deiman
Robert Deiman
20 jaar geleden
 
0 +1 -0 -1
Het voordeel van PDO vind ik toch wel de prepared statements, die werken heerlijk en zijn ideaal in gebruik... Inderdaad pure SQL code gebruiken en de juiste datatypen bij de verschillende op SQL gebaseerde databases, zal niet gaan als je een script schrijft dat 1 - op - 1 uitwisselbaar moet zijn...

Wat wel mogelijk is is een los bestand (of misschien meerdere) waarin de query's zijn gedefinieerd... Zo kan je een pgSQL.php bestand maken e.d. ;) Net zoiets als met languages
Roland van Wanrooy
Roland van Wanrooy
20 jaar geleden
 
0 +1 -0 -1
@Iltar:
Quote:
je gooit wel exceptions, maar die los je op binnen de class. Hier kan je beter een exception handler voor maken, of gewoon de try/catch correct gebruiken (je wilt niet intern de errors afhandelen)


Ah ja, ik begrijp het :) Zo moet het ook, maar zover was ik nog niet. Ik wilde gewoon ff een meldinkje op het scherm. :)

Robert:
prepared statements, die werken heerlijk

Precies. Eigenlijk wil ik gewoon met een paar simpele regeltjes code de database hanelingen regelen. Lekker makkelijk. Ik ben absoluut geen PHP-purist en ik ben me ervan bewust, dat goeroes mijn code het liefst op de brandstapel zouden smijten :) , maar het werkt en dan ben ik tevreden.

Bedankt voor jullie commentaar :)
Roland

edit:
Script is gewijzigd; de class is nu een extensie van PDO.
Iltar van der berg
iltar van der berg
20 jaar geleden
 
0 +1 -0 -1
Nu hij de PDO extend, wat is er dan anders dan wat de functies van PDO al bieden ?
Roland van Wanrooy
Roland van Wanrooy
20 jaar geleden
 
0 +1 -0 -1
@Iltar: Alleen de functies dbSelect, dbInsert, etc, die dus in dbPDO zitten. Dat vind ik makkelijk. Kan het anders? Zie ik iets over het hoofd?

edit:
@Jezpur: heb je hier iets aan?
Iltar van der berg
iltar van der berg
20 jaar geleden
 
// voorbeeld van exception handler die je beter kan gebruik ipv jouw functie

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

class ExceptionHandler
{
    public function __construct()
    {
        @
set_exception_handler(array($this, 'handler'));
    }

    
    public function handler($e)
    {

        // evt kan je nog met debug_backtrace() je errors verbeteren
        $sMsg = sprintf('Regel: <b>%s</b><br />Bestand: <b>%s</b><br />Fout: <b>%s</b>', $e->getLine(), $e->getFile(), $e->getMessage());
        echo sprintf('<br /><br /><br /><div style="width:50%%;padding:15px;background-color:#FFFF66;border:2px solid red;">%s</div><br /><br />', $sMsg);
        die();
    }
}


?>
Iltar van der berg
iltar van der berg
20 jaar geleden
 
0 +1 -0 -1
Jezpur, kijk eens naar de mysqli class.
Roland van Wanrooy
Roland van Wanrooy
20 jaar geleden
 
0 +1 -0 -1
Perfect Iltar! Dank je :)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jesper Diovo
Jesper Diovo
19 jaar geleden
 
0 +1 -0 -1
@Roland: nou een half jaar later ben ik dit eens uit gaan proberen :-P. Kwam toevallig terug bij dit script omdat ik nu tóch weer vast kom te zitten met PDO. Ik snap niet waarom mijn hosts dat gewoon niet ondersteunen. De vorige keer heb ik nog maar gewoon mysql_* functies gebruikt, zou toch voor PHP6 weer worden geüpdate, dus was het nog niet echt nodig. Nu wil ik af van de mysql_* functies en mijn nieuwe project volledige PDO-gestuurd schrijven, alleen ontbreekt PDO dus.

Ik heb, zoals in de een na laatste post van Roland staat, die link gevolgd en heb het nodige van Zend gedownload en geüpload. Alleen nu staat in dat voorbeeld dat er een Zend.php bestand zou zijn, echter heb ik deze helemaal niet! Waar hangt die uit of wat zou zijn vervanger moeten zijn?

Edit: maak wel even een topic aan, hier kijken niet zoveel mensen :-).

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

Inhoudsopgave

  1. pdomysql-database-class

Labels

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.