Permalänk
Medlem

Php, Pdo & Mvc

Jag pillade en del på min site häromdagen efter att jag läst upp om MVC efter tips i den här tråden

http://www.sweclockers.com/forum/showthread.php?s=&threadid=7...

Så nu satte jag mig ner och lade alla viktiga kodsnuttar inom ett visst område, röstningen, i små funktioner, vilket blev betydligt mer lätthanterligt och snyggt på "Controller" sidan. Dock stötte jag på ett problem med databasanslutningen.

Tidigare har jag haft en databasfil som sett ut ungefär såhär:

<? $db_adress = "localhost"; $db_username = "root"; $db_password = ""; // Database names $db_name = "belle"; $table_users = "adam"; // OSV OSV $mysql_handler = mysql_connect ($db_adress, $db_username, $db_password); mysql_select_db($db_name); if (!$mysql_handler) die ("Could not connect!"); ?>

På varje sida jag sedan behöver göra något mot databasen så inkluderar jag endast denna fil och så är jag igång direkt. Problemet som infann sig nu är att ingen av dessa variabler är tillgängliga till funktionerna. Visserligen skulle jag kunna använda global för att kunna nå de iallafall, eller t.om. inkludera filen i varje funktion, men det känns som ett väldigt fult trick och bör kunna göras på ett smartare vis.

Min andra tanke var nu att kapsla in dessa röstningsfunktioner i en röstningsklass. När ett röstningsobjekt skapas, skickar man en referens till ett PDO objekt och en referens till en array som innehåller tabelluppgifterna till konstruktorn.

Alltså får jag följande struktur:

dbh.inc - Innehåller en kodsnutt som skapar $dbh vilket är ett PDO objekt. Filen inkluderas på sidor där databashantering ska hanteras. Innehåller även $tbh som innehåller tabellnamnen.
votes.php - Innehåller klassen Votes, som tar en referens till $dbh och $tbh.

Det jag undrar är om det finns någon anledning för varför det här är ett dåligt sätt att angripa problemet, och jag skulle gärna vilja se hur ni brukar göra, då jag sett flera varianter på nätet som jag inte riktigt gillar och skulle behöva lite inspiration från era empiriska studier.

Visa signatur

Let me tell you something. You don't have to say anything, you know why? Cause you can pick up all your stuff, because you're mother-fucking fired! | Lemeno.se - En blogg om att Tjäna Pengar På Internet | Min blogg om styrketräning och kost

Permalänk

Jag har en databasklass som använder en statisk länk till MySQL.
Dvs att den kommer alltid använda samma länk om en länk är skapad och satt oavsett vart jag skapar mitt databasobjekt. Fungerar skitsmidigt.

class DBH { private static $link = null; public function __construct ( $host, $user, $pass, $db ) { if ( $link === null ) { if ( false === $link = mysql_connect ( $host, $user, $pass ) ) throw new Exception ( 'Couldn\\'t connect to database.' ); if ( mysql_select_db ( $db, $link ) === false ) throw new Exception ( 'Couldn\\'t select database.' ); } /* Sen fler funktioner som gör allt som behövs göras. */ }

Då kan du skapa hur många databashanteringsobjekt du vill men endå använder alla samma anslutning.

Det ska vara \ framför ' mitt i strängarna.