Forum » Server-Side scripting » Database class deel 2
devow.nl
Berichten: 1592
avatar
Offline Stuur privebericht
Beste leden,

Maand terug ongeveer was ik begonnen met een database class te schrijven. Nu wil ik weten of deze class een beetje op de goede weg is. Overigens is deze class gebaseerd op een class uit c#.

Heb hem omgebouwd voor PHP maar weet niet of het zo goed is. Er moet nog documentatie in en error reporting.

Code | Selecteer Alles
minimaliseren
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class Database
{
    private 
$host 'localhost';
    private 
$user '';
    private 
$password '';
    private 
$database '';
    private 
$connection '';
    private 
$hasConnection false;
    private 
$queryResult '';

    public function 
Connect()
    {
        
// nieuwe connectie aanmaken als hij nog niet aangemaakt is.
        
if($this->hasConnection === false)
        {
            
$this->connection = new MySQLi($this->host,$this->user,$this->password,$this->database);
   
            
// nette error meegeven als er geen verbinding gemaakt kon worden.
            
if(! $this->connection)
            {
                throw new 
Exception('Er kon geen verbinding worden gemaakt met de daabase.');
            }
            else
            {
                
// de connectie is aangemaakt en kan nu succesvol gebruikt worden.
                
$this->hasConnection true;
            }
        }
    }

    public function 
Disconnect()
    {
        if(
$this->hasConnection === true)
        {
            
mysqli_close($this->connection);
            
$this->hasConnection false;
        }
    }

    public function 
Delete($sTable$sWHERE)
    {
        
$this->Delete("DELETE FROM ".$sTable" WHERE ".$sWHERE);
    }

    public function 
Insert($sInsert)
    {
         
$this->Insert($sInsert);
    }

    public function 
Select($sSelect)
    {
        
$this->Select($sSelect);
    }

    public function 
Update($sTable$sSet$sWHERE)
    {
       
$this->Update("UPDATE ".$sTable." SET ".$sSet." WHERE ".$sWHERE);
    }
}

05-11-2011 11:44
Dit topic is 216 keer bekeken door 42 verschillende leden
Reacties op: "Database class deel 2"
1
Informatica Student
Berichten: 1406
avatar
Offline Stuur privébericht
Enkele dingen,
Waarom geef je meteen een waarde aan $connection en $queryResult?
Ik heb nog nooit met MYSQLI gewerkt, maar als daar de verbinding niet bij leuk, krijg je dan geen error?
Ik neem aan dat je het weet, maar voor de zekerheid. Roep de connect() functie aan in een try/catch.

Verder zou het leuk zijn dat indien er iets fout gaat bij de query dat je ook de error ziet(of juist niet).
05-11-2011 12:02
Vreemd
Berichten: 1246
avatar
Offline Stuur privébericht
Erg leuk van al die recursie in Database::Insert() en Database:elect()! Verder gaan Database:elete() en Database::Update() fouten geven.

Zoals ik de vorige keer al zei: Database:hasConnection is overbodig.

Hier een al iets betere Database::Connect():
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
public function Connect()
    {
        
// nieuwe connectie aanmaken als hij nog niet aangemaakt is.
        
if($this->connection instanceof MySQLi)
            return;

        
$this->connection = new MySQLi($this->host,$this->user,$this->password,$this->database);
   
        
// nette error meegeven als er geen verbinding gemaakt kon worden.
        
if($this->connection->connect_error// Voor PHP 5.2 < 5.2.9 gebruik mysqli_connect_error()
            
throw new Database_Exception('Er kon geen verbinding worden gemaakt met de daabase.');
    }


Waar zouden wij die C# class kunnen vinden trouwens?
05-11-2011 12:33
Luc
devow.nl
Berichten: 1592
avatar
Offline Stuur privébericht
Code | Selecteer Alles
minimaliseren
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
44
45
46
47
48
49
50
51
52
53
54
55
class Database
{
    private 
$host 'localhost';
    private 
$user '';
    private 
$password '';
    private 
$database '';
    private 
$connection '';
    private 
$queryResult '';

    public function 
Connect()
    {
        
// nieuwe connectie aanmaken als hij nog niet aangemaakt is.
        
if($this->connection instanceof MySQLi)
            return;

        
$this->connection = new MySQLi($this->host,$this->user,$this->password,$this->database);
   
        
// nette error meegeven als er geen verbinding gemaakt kon worden.
        
if($this->connection->connect_error// Voor PHP 5.2 < 5.2.9 gebruik mysqli_connect_error()
            
throw new Database_Exception('Er kon geen verbinding worden gemaakt met de database.');
    }

    public function 
Disconnect()
    {
        if(
$this->connection instanceof MySQLi)
        {
            
mysqli_close($this->connection);
        }
    }
    
    function 
num_rows($qury NULL )
    {
        
// als $qury niet NULL is dan proberen uit te voeren
        
if( $qury != NULL )
            
$this->setQuery($qury);
        
        
// rijen die geteld zijn teruggeven
        
return $this->getQuery->num_rows;
    }

    public function 
setQuery($qury NULL)
    {
        if(
$qury != NULL)
        {
            
// Qury proberen te maken en getten in de getQuery
            
$this->getQuery $this->connection->query($qury);
    
            
// error teruggeven als de query ongeldig is!
            
if( !$this->getQuery )
            {
                throw new 
Database_Exception('Helaas de query is niet goedgegaan.');
            }
        }
    }
}


Is deze wat beter? een ding om query's mee uit te voeren en nu ook alvast om resultaten te tellen.

De c# class heb ik van een klasgenoot gekregen dus is niet te vinden.

Zou deze opzet zo werken? met $this->connection->query ?


Sorry voor het late reageren heb net een kleine operatie achter de rug.
08-11-2011 12:21
Berichten: 552
avatar
Offline Stuur privébericht
Waar defineer jij $this->res?
08-11-2011 16:15
Luc
devow.nl
Berichten: 1592
avatar
Offline Stuur privébericht
Nergens was klein foutje, dat moest getQuery zijn.
08-11-2011 18:39
Tux
Professional noob
Berichten: 44
avatar
Offline Stuur privébericht
Connect private maken en die aanroepen in een constructor. Disconnect private maken en die aanroepen in een destructor.
Zo had ik het tenminste gedaan waarschijnlijk als er geen reden was om het niet te doen.

Op die manier bespaar je verderop in je code regels.

Misschien is het ook handig om een nieuw object aan te maken met Database_Result of zoiets. Dan hoef je niet te klungelen met getQuery en setQuery en dat soort dingen, maar dan haal je de resultaten uit een object.
08-11-2011 21:11
Reageer op: "Database class deel 2"
1
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden