[PHP] OO Variabele uit database halen

Pagina: 1
Acties:
  • 138 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer het zo makkelijk mogelijk te maken om variabele uit een database te halen. Daarvoor heb ik deze class geschreven:

PHP:
1
2
3
4
5
6
7
8
9
10
11
class Get_Var
{
    static function country_name()
    {
        $sql_country = "SELECT country_name FROM countries WHERE user_id = '" . $_SESSION['user_id'] . "'"; 
        $result_country = mysql_query( $sql_country ) or die ( 'Unable to execute query.' ); 
        $array_country = mysql_fetch_array( $result_country );

        return $array_country['country_name'];
    }
}


Met deze class kan ik vanuit elk document de land naam ophalen dmv:

PHP:
1
Get_Var::country_name()


Nu mijn vraag. Is dit wel efficient? En, is het mogelijk om de SQL query uit de functie te halen en die standaard aan te laten roepen, anders moet ik voor elke variabele die ik aanroep een andere query uitvoeren.

Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 21-09 00:18
PHP:
1
2
3
4
5
6
7
<?php
$query = mysql_query("SELECT country_name FROM countries WHERE user_id = '" . $_SESSION['user_id'] . "'");
while ($res = mysql_fetch_assoc($query))
{
   print_r($res);
}
?>


kijk daar eens naar :)

|>


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21-09 12:54
Verwijderd schreef op woensdag 27 april 2005 @ 16:55:
Ik probeer het zo makkelijk mogelijk te maken om variabele uit een database te halen. Daarvoor heb ik deze class geschreven:
Nu mijn vraag. Is dit wel efficient? En, is het mogelijk om de SQL query uit de functie te halen en die standaard aan te laten roepen, anders moet ik voor elke variabele die ik aanroep een andere query uitvoeren.
Efficient? Je geeft zelf het antwoord al, voor elke variable uit de database moet je een query uitvoeren. Je kunt beter een klasse hebben waar in je methoden definieerd die iets gezamelijks ophalen. Beetje vaag misschien, maar dan moet je denken aan methoden die alle coutries ophalen, getAllCountries(). Dat soort methoden

[offtopin][ik stop nu ff met typen, moet de trein nog halen][/]

Acties:
  • 0 Henk 'm!

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 06-07 20:28

DarkSilence

W3designer.nl

Ik zou als ik jou was en je wil OO gaan programmeren in PHP. Een class db aanmaken die standaard methoden bevat zoals connect(database connectie opboeuwen), excute, numRows. En geen methoden gaan schrijven die specefiek voor maar een tabel te gebruiken zijn.

Je kunt bijvoorbeeld resultaat van de mysql_query(hier staat je query) terug geven en deze door de aanroeper verder laten verwerken.

OO Houdt in dat je de objecten kan herbruiken die je maakt. En die functie kun je na mijn inziens niet vaak herbruiken. Veel succes.

W3designer.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Simon bedankt! Dat is een stuk efficienter natuurlijk!

Wat Sybr_E-N bedoelt snap ik niet goed. Ik wil juist van een user allemaal verschillende variabele hebben, aan alle country namen heb ik dus niet zoveel.
Of begrijp ik je verkeerd? *Post vanaf de trein svp ;)*

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21-09 12:54
Ben inmiddels thuis :)

Wat je heel veel ziet in de PHP wereld is de manier die DarkSilence beschrijft. Komt er op neer dat je 1 database class hebt waarin je allemaal standaard methoden verwerkt om de database te benaderen. Een methode om te connecten, query uitvoeren, rows tellen, 1 row ophalen, alle rows ophalen. In je PHP-scripts maak je dan gewoon een instantie van die class en voer je je queries uit.

Voordeel is dat je nu een database klasse hebt welke je altijd kunt gebruiken, bij allerlei verschillende website die je maakt. (Zoals het maar de zelfde database soort is zoals MySQL, PostGresSQL, etc..) Deze klassen hoef je tegenwoordig eigenlijk al niet eens meer te bedenken, want je kunt ze bij bosjes van internet halen.

Als je een beetje OOP wilt gaan, dat kan al tegenwoordig in PHP versie 5, en af wilt van het procedurele programmeren dan kun je vergaan om je presentatie, bussines en data van elkaar te scheiden. Op dezelfde fiets hoe je ook in Java, C++ of .NET programma's maakt. Je hebt dan een laag bovenop de classen die ik hierboven schetste (evenals DarkSilence). Persoonlijk prefereer ik deze methode omdat je dan een betere (controleerbare, onderhoudbare) flow in je applicatie krijgt.

Maar ik heb het idee dat het jouw niets zegt het OO gebeuren. Zoals gezegt de bovenste manier wordt erg vaak gebruikt, daarnaast kun je in PHP5 daarin veel verder gaan. Wellicht is dat voor jouw wat te ver tot nu toe.

Acties:
  • 0 Henk 'm!

Verwijderd

Wat mij betreft is een class maken met wat basale methodes waar al functies voor zijn niet echt nuttig. Je hebt veel meer aan een class die fungeert als query builder. Verschillende dbms-en hebben verschillende implementaties van SQL. Daardoor is het mogelijk een query op te stellen die wel werkt in MySQL maar spaakt loopt in PostgreSQL. Denk bijvoorbeeld alleen al aan auto_increment. Dan kan je wel een mooie class er omheen gooien omdat OO nou eenmaal hip is, maar dan ben je volgens mij verkeerd bezig.
Bij het porten naar een andere dbms moet je alsnog je hele code doorlopen om te controleren of je queries nog wel voldoen. Een query builder lijkt mij daarom wat handiger.

Acties:
  • 0 Henk 'm!

Verwijderd

Het is nog niet gezegd, maar kijk ook eens naar ADODB.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het OO gebeuren zegt me wel wat, maar 't is meer: ik heb de klepel horen ringelen, maar waar ie hangt?

Die classen maak ik niet aan om opnieuw te kunnen gebruiken, maar om de code op te delen in bepaalde stukken, zodat het overzichtelijk blijft. Waarschijnljk niet de manier voor mij.
Pagina: 1