MySQL database klasse feedback

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mitchel

mitchel

18/06/2009 12:14:00
Quote Anchor link
Omdat ik niet zo heel lang met php werk en ik vorige week een MySQL database klasse deels heb gemaakt wil ik graag weten of het goed is, of er nog verbeter punten zijn of dat het gewoon slecht is en ik beter opnieuw kan beginnen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
    
    class database {
        
        
        public function __construct() {
            $this->dbhost = 'localhost';
            $this->dbuser = 'xxxx';
            $this->dbpass = 'xxxx';
            $this->dbconn = null;
        }

                
        /**
         * Connectie maken met de MySQL database
         */

        
        public function connect($dbname) {
            if(!$this->dbconn) {
                if (!$this->dbconn = mysql_connect($this->dbhost, $this->dbuser, $this->dbpass)) {
                    throw new Exception('<p>Could not connect to the MySQL database!</p>');
                }
else {
                    if (!mysql_select_db($dbname)) {
                        throw new Exception('<p>Could not find specified database!</p>');
                    }
                }
            }
        }

                
        /**
         * Query uitvoeren, return $result
         */

        
        public function query($sql) {
            if(!$result = mysql_query($sql, $this->dbconn)) {
                throw new Exception('<p>Could not execute query!  MySQL error:  ' . mysql_error()  . '</p> ');
            }
else {
                return $result;
            }
        }


        /**
         * Fetch assoc(array) doormiddel van de resultaten van de query
         */

        
        public function FetchAssoc($sql) {
            if(!$result = mysql_fetch_assoc($sql)) {
                throw new Exception('<p>Could not execute query!</p>');
            }
else {
                return $result;
            }
        }

        
        /**
         * Fetch row array doormiddel van de resultaten van de query
         */

        
        public function FetchRow($sql) {    
            if(!$result = mysql_fetch_row($sql)) {
                throw new Exception('<p>Could not fetch row!</p>');
            }
else {
                return $result;
            }
        }

        
        /**
         * Tel het aantal rijen in de resultaten van de query
         */

        
        public function NumRows($sql) {
            if(!$result = mysql_num_rows($sql)) {
                throw new Exception('<p>Could not count the number of rows!</p>');
            }
else {
                return $result;
            }
        }
        
    }

    
?>
Gewijzigd op 01/01/1970 01:00:00 door Mitchel
 
PHP hulp

PHP hulp

24/05/2024 02:19:36
 
Emmanuel Delay

Emmanuel Delay

18/06/2009 12:56:00
 
Mitchel

mitchel

18/06/2009 13:12:00
Quote Anchor link
Emmanuel Delay schreef op 18.06.2009 12:56:
Ik heb die ook gezien maar die is heel wat uitgebreider. En ik vroeg dus of mijnes een beetje op de goede weg was
 
Emmanuel Delay

Emmanuel Delay

18/06/2009 13:41:00
Quote Anchor link
Je kan zeker wel verder bouwen waaraan je bezig bent.

Wat je je zelf moet afvragen, is wat je precies aan toegevoegde waarde hebt.
Zoals ik het nu zie, komt elk van jouw methodes overeen met 1 (niet OOP) functie.

De exeptions die je aanroept, zijn er nu meestal ook al, in de vorm van warnings.

Wanneer je er toe komt dat je minder schrijfwerk hebt buiten de klasse, heb je toegevoegde waarde.
Mocht je meer veiligheid bieden binnen de klasse, zodat je minder werk hebt buiten de klasse, heb je ook toegevoegde waarde.

Mij lijkt het dat je - voorlopig - niet veel meer doet dan mySQL functies vervangen door andere functies, maar dan met een -> .

1 voorbeeld: waarom zou je connect niet als private zetten en vanuit de constructor aanspreken. Je gaat toch geen database object aanmaken als je geen connectie zou maken?
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
 
Mitchel

mitchel

18/06/2009 14:14:00
Quote Anchor link
Emmanuel Delay schreef op 18.06.2009 13:41:
Je kan zeker wel verder bouwen waaraan je bezig bent.

Wat je je zelf moet afvragen, is wat je precies aan toegevoegde waarde hebt.
Zoals ik het nu zie, komt elk van jouw methodes overeen met 1 (niet OOP) functie.

De exeptions die je aanroept, zijn er nu meestal ook al, in de vorm van warnings.

Wanneer je er toe komt dat je minder schrijfwerk hebt buiten de klasse, heb je toegevoegde waarde.
Mocht je meer veiligheid bieden binnen de klasse, zodat je minder werk hebt buiten de klasse, heb je ook toegevoegde waarde.

Mij lijkt het dat je - voorlopig - niet veel meer doet dan mySQL functies vervangen door andere functies, maar dan met een -> .

1 voorbeeld: waarom zou je connect niet als private zetten en vanuit de constructor aanspreken. Je gaat toch geen database object aanmaken als je geen connectie zou maken?
bedankt voor je reply en dit is nog maar een basis en als ik meer vaardigheid krijg in php word deze zeker uitgebreid. Ik connect niet in mijn construct omdat ik connect en select database in 1 functie heb staan en via deze manier kies ik ook meteen de database
 
Emmanuel Delay

Emmanuel Delay

18/06/2009 15:43:00
Quote Anchor link
Bekijk dit bv. eens.

Voeg deze methode eens toe aan je klasse

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
        public function select($sql, $db=null)
        {

          if ( ! empty($db) )
            $this->connect($db);
          if ( empty($this->dbconn) )
            return false;
          $res = $this->query($sql);
          $rows = array();
          for ($i = 0; $i < $this->NumRows($res); $i++)
            $rows[] = $this->FetchAssoc($res);
          return $rows;
        }

?>


Dan kan je je klasse bv. zo gerbruiken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$m_db
= new database();
$leden = $m_db->select ('SELECT * FROM phpbb3_users', 'forum_database');
?>


Zo'n functies zou je ook kunnen maken voor insert, update, ...

Nog een detail: hernoem de parameters $sql. Bv. je fetcht een recource, niet een sql string. Je zou de naam van die parameter dan ook beter $resource noemen.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
 
Mitchel

mitchel

18/06/2009 17:02:00
Quote Anchor link
Emmanuel Delay schreef op 18.06.2009 15:43:
Bekijk dit bv. eens.

Voeg deze methode eens toe aan je klasse

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
        public function select($sql, $db=null)
        {

          if ( ! empty($db) )
            $this->connect($db);
          if ( empty($this->dbconn) )
            return false;
          $res = $this->query($sql);
          $rows = array();
          for ($i = 0; $i < $this->NumRows($res); $i++)
            $rows[] = $this->FetchAssoc($res);
          return $rows;
        }

?>


Dan kan je je klasse bv. zo gerbruiken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$m_db
= new database();
$leden = $m_db->select ('SELECT * FROM phpbb3_users', 'forum_database');
?>


Zo'n functies zou je ook kunnen maken voor insert, update, ...

Nog een detail: hernoem de parameters $sql. Bv. je fetcht een recource, niet een sql string. Je zou de naam van die parameter dan ook beter $resource noemen.
bedankt voor je reply met dit kan ik ook wel wat en ik ga er nog even verder aan sleutelen :)
 
Emmanuel Delay

Emmanuel Delay

19/06/2009 02:29:00
Quote Anchor link
Nog iets.

Wat ik ook nog doe, is het volgende
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
function getDb()
{

if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1')
  {

    return array(
    'de_database',             // db
    '127.0.0.1',          // server
    'root',               // user
    '*****'                    // pass
    );
  }

  else
  {
    return array(
    'de_database',                       // db
    'mysql.*****.nl',       // server
    'de_user',                // user
    '******'                        // pass
    );
  }
}

?>


Zo kan je zowel de database gegevens op de server op op je eigen pc invullen in het zelfde script.

Ik denk, als je nu voort gaat op wat je hebt, en de tips die je kreeg, dat je nu echt iets met toegevoegde waarde zal kunnen maken.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.