Gegroet mede-devvers,
ik ben met een project bezig, en merk dat ik zoals altijd bij een nieuw project het handiger en sneller wil doen dan de vorige keer. Ik heb nu een aantal classes geschreven die zeer handig zijn voor wat ik wil doen, maar ik zit nu nog steeds met een probleem met MySQL queries.
De functionaliteit zoals het nu is: ik heb een Data class die queries kan uitvoeren en de data in gewenst formaat kan teruggeven. In elke losse module die ik maak (bijvoorbeeld een gastenboek) maak ik een nieuwe class (bijv. GuestbookData) die extend op Data. In deze class staan eigenlijk alleen maar queries, als volgt:
Allemaal leuk en aardig en het werkt ook wel okay, maar wat ik heel erg vaak tegenkom is dat ik bepaalde queries meerdere keren heb staan in de verschillende ModuleData classes. Dit zorgt wel voor een goede onafhankelijkheid voor iedere module (hm, nu ik erover nadenk is dit eigenlijk wel essentieel... kom er zo wel op terug), maar ook voor een dubbel-op gevoel.
Wat ik eigenlijk zou willen (en wat ik net ook gemaakt heb) is dat ik geen extra class nodig zou hebben die extend op mijn originele Data class, maar dat ik alleen de Data class gebruik. De module Data classes zijn namelijk alleen maar een soort query containers op het moment. Als ik namelijk losse files zou hebben, dan zou ik die makkelijker in kunnen laden, en dus query sets kunnen maken... Bijvoorbeeld een sloot met standaard queries die dan niet 10x in alle losse modules zouden hoeven staan.
Ik heb dus net zo gemaakt dat ik alle queries in een losse file zet en die dan inlaad in mijn Data class dmv:
De losse file is dan iets als:
Maar als je dit bestand dus include en op de query stack (zo heb ik het maar even genoemd) gooit, dan krijg je bij dynamische queries (waar je dus nog data invult, zoals bij de tweede query hier (EntryNew) een sloot met warning dat $data geen waarde heeft. Dat is inderdaad dan ook niet zo, ik zou die waardes ook pas zetten op het moment dat die specifieke query wordt uitgevoerd. Dit probleem had ik eerder dus niet omdat ik daar nog een if/ifelse /else constructie heb voordat ernaar gekeken wordt.
1. Hoe zouden jullie dit oplossen?
2. Hoe werken jullie met het ik-wil-geen-queries-in-mijn-code probleem? Want ik wil gewoon geen MySQL tussen mijn andere code hebben, ik wil het _zowieso_ in een losse file. Op dit moment is dat dus nog zo, maar ik wil
Thanks.
ik ben met een project bezig, en merk dat ik zoals altijd bij een nieuw project het handiger en sneller wil doen dan de vorige keer. Ik heb nu een aantal classes geschreven die zeer handig zijn voor wat ik wil doen, maar ik zit nu nog steeds met een probleem met MySQL queries.
De functionaliteit zoals het nu is: ik heb een Data class die queries kan uitvoeren en de data in gewenst formaat kan teruggeven. In elke losse module die ik maak (bijvoorbeeld een gastenboek) maak ik een nieuwe class (bijv. GuestbookData) die extend op Data. In deze class staan eigenlijk alleen maar queries, als volgt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| Class GuestbookData extends Data { function GuestbookQuery ($query, $method, $data) { // Guestbook if($query == "CountriesAll") { $this->dbQuery = " SELECT * FROM `Countries` ORDER BY CountryName ; " ; } elseif($query == "EntryNew") { $this->dbQuery = " INSERT INTO `Guestbook` VALUES ( '', '" . $data['GBTime'] . "', '" . $data['GBName'] . "', '" . $data['GBCountry'] . "', '" . $data['GBLocation'] . "', '" . $data['GBEmail'] . "', '" . $data['GBURL'] . "', '" . $data['GBMessage'] . "' ) ; " ; } if(isset($this->dbQuery)) { return Data::MySQLQuery($this->dbQuery, $method, $data) ; } else { trigger_error("<b>" . __CLASS__ . "::" . __FUNCTION__ . "</b> : No query was set for the given index '" . $query . "'", E_USER_NOTICE) ; } } // EoF: GuestbookQuery } // EoC: GuestbookData extends Data |
Allemaal leuk en aardig en het werkt ook wel okay, maar wat ik heel erg vaak tegenkom is dat ik bepaalde queries meerdere keren heb staan in de verschillende ModuleData classes. Dit zorgt wel voor een goede onafhankelijkheid voor iedere module (hm, nu ik erover nadenk is dit eigenlijk wel essentieel... kom er zo wel op terug), maar ook voor een dubbel-op gevoel.
Wat ik eigenlijk zou willen (en wat ik net ook gemaakt heb) is dat ik geen extra class nodig zou hebben die extend op mijn originele Data class, maar dat ik alleen de Data class gebruik. De module Data classes zijn namelijk alleen maar een soort query containers op het moment. Als ik namelijk losse files zou hebben, dan zou ik die makkelijker in kunnen laden, en dus query sets kunnen maken... Bijvoorbeeld een sloot met standaard queries die dan niet 10x in alle losse modules zouden hoeven staan.
Ik heb dus net zo gemaakt dat ik alle queries in een losse file zet en die dan inlaad in mijn Data class dmv:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
| function loadQueries($file) { if(is_file($file)) { include($file) ; // Submit queries to Data class query stack (how fancy!) $this->addQueriesToStack($dbQuery) ; unset($dbQuery) ; } else { trigger_error("<b>" . __CLASS__ . "::" . __FUNCTION__ . "</b> : Query file doesn't exist", E_USER_NOTICE) ; } } // EoF: loadQueries |
De losse file is dan iets als:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| $dbQuery['CountriesAll'] = " SELECT * FROM `Countries` ORDER BY CountryName ; " ; $dbQuery['EntryNew'] = " INSERT INTO `Guestbook` VALUES ( '', '" . $data['GBTime'] . "', '" . $data['GBName'] . "', '" . $data['GBCountry'] . "', '" . $data['GBLocation'] . "', '" . $data['GBEmail'] . "', '" . $data['GBURL'] . "', '" . $data['GBMessage'] . "' ) ; " ; |
Maar als je dit bestand dus include en op de query stack (zo heb ik het maar even genoemd) gooit, dan krijg je bij dynamische queries (waar je dus nog data invult, zoals bij de tweede query hier (EntryNew) een sloot met warning dat $data geen waarde heeft. Dat is inderdaad dan ook niet zo, ik zou die waardes ook pas zetten op het moment dat die specifieke query wordt uitgevoerd. Dit probleem had ik eerder dus niet omdat ik daar nog een if/ifelse /else constructie heb voordat ernaar gekeken wordt.
1. Hoe zouden jullie dit oplossen?
2. Hoe werken jullie met het ik-wil-geen-queries-in-mijn-code probleem? Want ik wil gewoon geen MySQL tussen mijn andere code hebben, ik wil het _zowieso_ in een losse file. Op dit moment is dat dus nog zo, maar ik wil
Thanks.
the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.