Hallo beste PHP'ers van het land!

Ik ben bezig met een phpapplicatie (waarvan ik <b>geen</b> voorbeelden heb). Maar hiermee heb ik toch een beetje probleempjes. Wat jullie kunnen doen om mij te helpen is antwoord geven op het volgende.

1. Ik heb verschillende scripts waarin ik mysql gebruik. Ik heb voor mysql de functie sql() aangemaakt die: de host, user, pass en dbname ophaalt, verbinding maakt, de sql uitvoert, verbinding sluit en vervolgens het resultaat terug geeft. Maar nu wil ik dus dit systeempje gebruiken in verschillende functies en classes e.d. Hebben jullie hiervoor tips, moet ik het helemaal anders doen of ga ik de goede kant op?

2. Hebben jullie eventueel nog voorbeelden of algemene tips voor phpapplicaties? Structuur in mappen, scripts, classes, etc.

Hier moeten jullie toch wat mee kunnen?


Mvg

Tim
Hoi Tim,

Als ik het goed begrijp maak je voor elke query overnieuw een verbinding met de database. Dit is niet tactisch, het opzetten en sluiten van een verbinding met de database kost verhoudingsgewijs veel tijd. Je kunt beter aan het begin van je script een verbinding maken en die aan het einde weer sluiten. (Of je maakt gebruik van persistente connecties)

En als je toch bezig wilt gaan met structuur kan het handig zijn om eens te kijken naar OOP en een aantal frameworks als Zend Framework.

Een goede analyse van de requirements van je applicatie leiden tot een ontwerp van zowel je database (het goed normaliseren is zeer belangrijk) als van je oop code.
TJVB schreef op 30.09.2008 22:14
Hoi Tim,

Als ik het goed begrijp maak je voor elke query overnieuw een verbinding met de database. Dit is niet tactisch, het opzetten en sluiten van een verbinding met de database kost verhoudingsgewijs veel tijd. Je kunt beter aan het begin van je script een verbinding maken en die aan het einde weer sluiten. (Of je maakt gebruik van persistente connecties)

En als je toch bezig wilt gaan met structuur kan het handig zijn om eens te kijken naar OOP en een aantal frameworks als Zend Framework.

Een goede analyse van de requirements van je applicatie leiden tot een ontwerp van zowel je database (het goed normaliseren is zeer belangrijk) als van je oop code.


Bedankt voor je reactie,

Wat bedoel je precies met 'normaliseren'?
Frameworks kijk ik nog liever even niet naar, ik wil het wiel even opnieuw uitvinden dan weet ik ook precies hoe t in elkaar zit. Met OOP ben ik ook al bezig.

Wat betreft de databaseverbinding, ik zat te denken aan het volgende:
- Ik heb een config.php die ik aanroep vanuit de index.php
- Ik kan dus aan het begin van de config.php de verbinding openen en aan het eind afsluiten. (dus ik zet aan het begin bijvoorbeeld $db)
- Maar nu: In de verschillende classes en functies die ik 'require' in mijn config.php wordt af en toe naar de $db gevraagd. Hoe moet ik dan zorgen dat alle functies en classes enz bij $db kunnen. Moet je dan Globals of constants gebruiken of zit ik nu helemaal verkeerd?
Je kunt die $db in een registry zetten.

dat komt neer op iets als dit:
<?php
class Registry {
static public $vars = array();

public static function set($key,$value){
self::$vars[$key] = $value;
}

public static function get($key){
if(isset(self::$vars[$key])){
return self::$vars[$key];
}
trigger_error('This key does not exists',E_USER_NOTICE);
}
}


// Zet je database object/connectie in het register
Registry::set('db',$db);


// en verder in je script, bijvorobeeld in een class
class IndexController {

public function index(){
$db = Registry::get('db');
$db->query('...');
}

}
?>
Wat bedoel je precies met 'normaliseren'?
Simpel gezegd betekent dat zo weinig mogelijk dubbele gegevens in je database. Daardoor houd je die kleiner en wordt hij sneller doorzoekbaar.
Arian schreef op 30.09.2008 22:28
Je kunt die $db in een registry zetten.

dat komt neer op iets als dit:
<?php
class Registry {
static public $vars = array();

public static function set($key,$value){
self::$vars[$key] = $value;
}

public static function get($key){
if(isset(self::$vars[$key])){
return self::$vars[$key];
}
trigger_error('This key does not exists',E_USER_NOTICE);
}
}


// Zet je database object/connectie in het register
Registry::set('db',$db);


// en verder in je script, bijvorobeeld in een class
class IndexController {

public function index(){
$db = Registry::get('db');
$db->query('...');
}

}
?>



Geweldig, helemaal waar ik naar zocht.
En dat kan dus ook met functies aanroepen vanuit het registry
Bijvoorbeeld Registry::sql($sql);
Tim S schreef op 01.10.2008 11:49

Geweldig, helemaal waar ik naar zocht.
En dat kan dus ook met functies aanroepen vanuit het registry
Bijvoorbeeld Registry::sql($sql);

Euuhm... nee
Wat je nou gata doen is een methode toevoegen aan je registry classe terwijl je registry helemala niks met je databse te maken moet hebben.
Je moet een instantie van je databse klasse toevoegen aan je registry met de daarvoor bestemde methode. vervolgens kan je overal die instantie ophalen.
Normaliseren gaat buiten je PHP om dit is gewoon zo goed mogelijk jou datamodel opzetten. Als dit klaar is, is het een kwestie van je applicatie schrijven in PHP, het datamodel is de basis.
Bedankt! Ik snap het helemaal, geloof ik..

$db is in eerste instantie dus bijvoorbeeld
een object, met daarin een methode query()
zoals je hebt weergegeven in $db->query()

Ik ga er mee aan de slag!

Reageren