Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
Wat ik persoonlijk doe is werken met een connectionstring en een DBFactory. Ik geef bvb de connectionstring (die in de praktijk een Array is zodat ik niet bij elke request moet gaan exploden) mee:
Dan geef ik dat door aan mijn DB factory die checkt welk type het is en de juiste file included (MySQLDB bijvoorbeeld) en de connectionstring dan weer doorgeeft aan de static Create function van MySQLDB. Deze geeft een instance van MySQLDB terug. Deze MySQLDB implements een interface zodat ik alles dat ik terug krijg van mijn DBFactory kan gebruiken met recordSet(), exec() en insert() (insert() geeft het ID van de ingevoegde row terug).
Edit: Het is hiervoor dan wel nodig om prepared statements (of eventueel prepared statements/triggers zelf implementeren, zodat je zeker bent dat elke geïmplementeerde database ermee overweg kan) te gebruiken, anders heb je nog altijd het probleem dat je SQL mogelijk niet werkt op elke database.
PHP:
1
2
3
4
5
6
| $connectionString = Array( 'type' => 'mysql', 'user' => 'foo', 'password' => 'bar', 'database' => 'foobar' ); |
Dan geef ik dat door aan mijn DB factory die checkt welk type het is en de juiste file included (MySQLDB bijvoorbeeld) en de connectionstring dan weer doorgeeft aan de static Create function van MySQLDB. Deze geeft een instance van MySQLDB terug. Deze MySQLDB implements een interface zodat ik alles dat ik terug krijg van mijn DBFactory kan gebruiken met recordSet(), exec() en insert() (insert() geeft het ID van de ingevoegde row terug).
Edit: Het is hiervoor dan wel nodig om prepared statements (of eventueel prepared statements/triggers zelf implementeren, zodat je zeker bent dat elke geïmplementeerde database ermee overweg kan) te gebruiken, anders heb je nog altijd het probleem dat je SQL mogelijk niet werkt op elke database.
[ Voor 23% gewijzigd door dingstje op 03-06-2005 20:54 ]
If you can't beat them, try harder
Je kan met een beetje object georienteerd werken iets moois maken. Je krijgt dan een standaard class welke je uit kan breiden per database. Je zou eens moeten kijken naar wat andere database classes, daar zie je veel goede voorbeelden. In principe komt het er op neer dat je geen SQL meer schrijf maar dat je methoden (functies in je DB class) aanroept met argumenten. Deze maakt dan de juiste SQL.
juist, dit komt idd aardig overeen met hetgeen ik in gedachten had. je maakt inderdaad zelf geen sql meer maar laat dit doen door functies van de desbetreffende DBclass. je zorgt dat alle aanroepen voor eenzelfde bewerking het zelfde zijn, en laat die dan uitvoeren door de DBclass zodat het werkt op verschillende databases. dat is dus het princiepe van een database abstractie laag als ik het dus goed heb?
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition