• Login
  • Register
  • Zoek
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Filebase Entry
  • More Options

ICTscripters

Dé plek voor IT

Dé plek voor IT

Login

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • Beta-testers gezocht voor Crypto-oefenplatform

    Syntax 29 januari 2026 om 16:11
  • Na 15 jaar terug van weggeweest: iCriminals.nl is terug (BETA)!

    Syntax 19 januari 2026 om 09:34
  • Developer Gezocht

    Mikevdk 10 januari 2026 om 18:57
  • Op zoek naar de legends

    Syntax 5 januari 2026 om 13:50
  • [FREE] WeFact Hosting module

    Jeroen.G 13 oktober 2025 om 14:09
  • Help testers nodig voor android app Urgent

    urgentotservices 26 september 2025 om 10:21
  • Versio vervanger

    Jeroen.G 25 augustus 2025 om 15:56
  • Afspraken systeem met planbeperking

    Lijno 1 augustus 2025 om 23:04

Marktplaats

  • 350 Nieuwe Domeinnamen Januari 2026

    shiga 1 februari 2026 om 14:21
  • 321 Nieuwe Domeinnamen December 2025

    shiga 1 januari 2026 om 10:26
  • Meerdere mafia game template te koop

    Syntax 26 december 2025 om 00:07

Database class

  • Luc
  • 4 oktober 2011 om 17:44
  • Luc
    Software Engineer
    Ontvangen Reacties
    44
    Berichten
    1.986
    • 4 oktober 2011 om 17:44
    • #1

    Beste leden,

    Omdat ik graag meer wil leren van classes wil ik graag jullie mening over mijn begin van de database class die ik aan het maken ben.

    PHP
    class Database
    {
    	private $host;
    	private $user;
    	private $password;
    	private $database;
    	private $connection;
    	private $connectionTrue;
    	
    	
    	function dbData
    	{
    		$this->host = 'localhost';
    		$this->user = '';
    		$this->pw = '';
    		$this->db = '';
    		$this->connectionTrue = FALSE;
    	}
    	
    	function connect($host, $user, $password, $database)
    	{
    		if($connectionTrue === FALSE)
    		{
    			$connection = @new MYSQLi($host,$user,$password,$database);
    			
    			if(! $this->connection)
    			{
    				$error = 'Er kon geen verbinding met de database aangegaan worden.';
    				die($error);
    			}
    			else
    			{
    				$connectionTrue === TRUE;
    			}
    		}
    	}
    	
    	
    	
    }
    Toon Meer

    Hopelijk hebben jullie veel kritiek waar ik verder mee kan. Houdt het wel netjes, en beargumenteer je mening. Het is mijn eerste opzet, en mijn eerste grote class die ik wil gaan schrijven.

    Website: https://devimo.nl
    Skype: https://join.skype.com/invite/dJyYILTt7Eqh

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Reza
    Professional
    Ontvangen Reacties
    13
    Berichten
    1.536
    • 4 oktober 2011 om 18:34
    • #2

    Ik heb eigenlijk geen kritiek.
    Ik vind het wel goed geschreven.

    Met vriendelijke groet,
    Reza.

  • Tim
    Enlightened
    Ontvangen Reacties
    77
    Berichten
    3.686
    • 4 oktober 2011 om 18:40
    • #3

    Misschien een Javadoc eraan toevoegen?

    Overigens vind ik het zelf altijd erg vervelend als de waardes true en false met hoofdletters geschreven worden, maar dat is iets persoonlijks.

    Verder mis ik bij dbData haakjes. En waarom initialiseer je ze via een functie? Je maakt de variabelen al in het begin aan maar doet en geeft geen waarde eraan.

    Ook snap ik niet dat je parameters aan de connectie functie geeft. Je kan alles al ophalen via this neem ik aan.

    Edit:
    Misschien de namen public en final toevoegen aan een functie.

    Master student IT-recht en Master student Ondernemingsrecht & software ingenieur
    My Personal profile
    My professional profile (LinkedIn/CV)

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 4 oktober 2011 om 18:46
    • #4

    @BrokenTrack: JavaDoc? PHPDoc in PHP. :p

    Ook ik snap de functie van dbData niet. Wat doet deze functie? En waar is deze goed voor?

    Je connect methode stopt de uitvoer van het gehele script als het verbinden met de database mislukt. Dit is een slecht principe: Als de database verbinding mislukt, moet de class dit terug geven, en moet de gebruiker van de class moet het probleem oplossen. Zo kun je beslissen of je de script uitvoer wilt stoppen, of een deel over wil slaan.

    Je zou een exception kunnen gooien als de verbinding mislukt, of de methode connect true of false laten returnen.

    http://php.net/manual/en/language.exceptions.php

  • Luc
    Software Engineer
    Ontvangen Reacties
    44
    Berichten
    1.986
    • 4 oktober 2011 om 18:48
    • #5
    PHP
    <?php
    class Database
    {
    	private $host = 'localhost';
    	private $user = '';
    	private $password = '';
    	private $database = '';
    	private $connection = '';
    	private $connectionTrue = false;
    
    
    	
    	public function connect()
    	{
    		if($connectionTrue === false)
    		{
    			try
    			{
    				$this->connection = @new MYSQLi($this->host,$this->user,$this->password,$this->database);
    				return $this->connectionTrue = true;
    			}
    			catch (Exception $e) {
    			{
    				return 'Caught exception: ',  $e->getMessage(), "\\n" $this->connectionTrue;
    			}
    		}
    	}	
    }
    ?>
    Toon Meer

    Is dit zo beter?

    Verder ben ik c# classes gewend en daar gebruikte ik steeds getters en setters. Dar was dus eigenlijk die functie voor bedoeld:$

    De === heb ik ergens ooit gelezen dat die ook echt waar moet zijn (hoofdletter gevoelig). Weet niet meer waar ik dat ooit heb gelezen, maar dat heb ik me een beetje aangeleerd om te gebruiken bij belangrijke functies.

    Verder had ik static gedaan omdat ik dacht dat hij tog niet veranderd.. Heb het alweer weggehaald.

    Website: https://devimo.nl
    Skype: https://join.skype.com/invite/dJyYILTt7Eqh

  • Tim
    Enlightened
    Ontvangen Reacties
    77
    Berichten
    3.686
    • 4 oktober 2011 om 18:51
    • #6

    $connectionTrue moet natuurlijk zonder die quotes neem ik aan.
    Verder ben je eigenlijk ??n false vergeten te veranderen naar kleine letters.

    Overigens, waarom maak je hem static? Verder doe je normalitair "function" achteraan en public/private/etc als eerst.

    Ook zeg je op het laatst, $connectionTrue === true. ??n isje is voldoende lijkt mij.

    @Killing, ik heb nog nooit van PHPDoc gehoord. In wat voor opzicht verschilt dat met JavaDoc?

    Master student IT-recht en Master student Ondernemingsrecht & software ingenieur
    My Personal profile
    My professional profile (LinkedIn/CV)

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 4 oktober 2011 om 18:54
    • #7

    Nee, eigenlijk niet. Waarom is je connect methode static? Dit is nergens goed voor. Daarbij maakt je statische methode connect gebruik van niet statische properties ($this->connect), wat in principe niet mogelijk is.

  • Tim
    Enlightened
    Ontvangen Reacties
    77
    Berichten
    3.686
    • 4 oktober 2011 om 18:59
    • #8

    Dat van === klopt. Maar voor het geven van een waarde blijf je nog steeds een enkele = gebruiken. === is voor vergelijkingen.

    Verder moet je niet vergeten om bij de rest ook $this te gebruiken, anders zeg je dat enkel $connectionTrue true is binnen de functie en niet binnen de klasse.

    Master student IT-recht en Master student Ondernemingsrecht & software ingenieur
    My Personal profile
    My professional profile (LinkedIn/CV)

  • Luc
    Software Engineer
    Ontvangen Reacties
    44
    Berichten
    1.986
    • 4 oktober 2011 om 19:01
    • #9

    Haha ik zie het nu pas dat ik hem een waarde wil geven met === bedankt. En ik moet dus

    $this->connection =
    $this->connectionTrue = true; doen?

    Website: https://devimo.nl
    Skype: https://join.skype.com/invite/dJyYILTt7Eqh

  • Tim
    Enlightened
    Ontvangen Reacties
    77
    Berichten
    3.686
    • 4 oktober 2011 om 19:03
    • #10

    Ja.

    Edit:
    Mogelijk wil je ook false/true returnen ipv enkel een mogelijke exception zoals Killing eerder zei.

    Master student IT-recht en Master student Ondernemingsrecht & software ingenieur
    My Personal profile
    My professional profile (LinkedIn/CV)

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 4 oktober 2011 om 19:10
    • #11

    De exception is prima. Wat je nu verkeerd doet, is het afvangen van de exception. Alleen het gooien van de exception doe je in de methode (throw), en het opvangen in de code die gebruikt maakt van je class.

    Dit komt er dan zo uit te zien:

    PHP
    <?php
    
    
    try {
      $database = new Database;
      $database->connect();
    } catch(DatabaseException $ex) {
      echo 'Database verbinding mislukt: '. $ex->getMessage();
    }
    
    
    ?>
    Toon Meer

    De class DatabaseException moet je dan nog wel even aanmaken, als uitbreiding op Exception (extends).

    http://nl3.php.net/manual/en/keyword.extends.php

  • Luc
    Software Engineer
    Ontvangen Reacties
    44
    Berichten
    1.986
    • 4 oktober 2011 om 19:17
    • #12

    Moet die try catch in mijn code dan weg, of moet ik er throw new Exception van maken?

    Website: https://devimo.nl
    Skype: https://join.skype.com/invite/dJyYILTt7Eqh

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 4 oktober 2011 om 19:26
    • #13

    De try catch moet weg, en je moet een throw toevoegen aan de methode inderdaad.

  • Luc
    Software Engineer
    Ontvangen Reacties
    44
    Berichten
    1.986
    • 4 oktober 2011 om 19:38
    • #14
    PHP
    public function connect()
    	{
    		if($connectionTrue === false)
    		{
    			$this->connection = @new MYSQLi($this->host,$this->user,$this->password,$this->database);
    			
    			if(! $this->connection)
    			{
    				throw new Exception('Er kon geen verbinding worden gemaakt met de daabase.');
    			}
    			else
    			{
    				return $this->connectionTrue = true;
    			}
    		}
    		
    	}
    Toon Meer

    Is deze functie zo goed? Of zijn er nog meer verbeteringen. En hebben jullie suggesties welke andere functies er in een goede database class moeten zitten?

    Website: https://devimo.nl
    Skype: https://join.skype.com/invite/dJyYILTt7Eqh

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 4 oktober 2011 om 20:12
    • #15

    Dit begint er inderdaad erg op te lijken! De variabele connectionTrue zou ik hasConnection noemen. De return waarde is niet nodig: De methode return tenslotte altijd true, of gooit een exception.

  • Luc
    Software Engineer
    Ontvangen Reacties
    44
    Berichten
    1.986
    • 4 oktober 2011 om 20:53
    • #16
    PHP
    <?php
    class Database
    {
    	private $host = 'localhost';
    	private $user = '';
    	private $password = '';
    	private $database = '';
    	private $connection = '';
    	private $hasConnection = false;
    
    
    	public function connect()
    	{
    		if($hasConnection === false)
    		{
    			$this->connection = @new MYSQLi($this->host,$this->user,$this->password,$this->database);
    			
    			if(! $this->connection)
    			{
    				throw new Exception('Er kon geen verbinding worden gemaakt met de daabase.');
    			}
    			else
    			{
    				$this->hasConnection = true;
    			}
    		}
    		
    	}
    }
    ?>
    Toon Meer

    Dit heb ik tot nu toe dan, nog meer verbeter punten? En wat staat er nog meer in een goede database class (insert select update delete).

    Website: https://devimo.nl
    Skype: https://join.skype.com/invite/dJyYILTt7Eqh

  • Tim
    Enlightened
    Ontvangen Reacties
    77
    Berichten
    3.686
    • 4 oktober 2011 om 20:55
    • #17

    Documentatie!

    Master student IT-recht en Master student Ondernemingsrecht & software ingenieur
    My Personal profile
    My professional profile (LinkedIn/CV)

  • Darsstar
    Vreemd
    Berichten
    1.173
    • 5 oktober 2011 om 01:15
    • #18

    1) Haal die @ weg aub, het is over het algemeen geen goed idee om fouten te onderdrukken.
    2) Voeg meer methoden toe, nu heb je er niets aan.
    3) Als je verbinding moet maken met twee verschillende databases, hoe ga je dat nu doen?
    - de class copy-pasten en de gegevens aanpassen?
    - setters maken?
    - iets anders?
    4) Je gebruikt in de if $hasConnection terwijl het $this->hasConnection hoort te zijn.
    5) === controleert op waarde en op type, voorbeeldje:

    PHP
    if (1 == true)
    {
    // wordt uitgevoerd omdat ze beiden als niet-nul waarden worden gezien
    }
    
    
    if (1 === true)
    {
    // wordt NIET uitgevoerd omdat de ene een int is en de andere een boolean
    }
    
    
    // van php.net
    var_dump((bool) "");        // bool(false)
    var_dump((bool) 1);         // bool(true)
    var_dump((bool) -2);        // bool(true)
    var_dump((bool) "foo");     // bool(true)
    var_dump((bool) 2.3e5);     // bool(true)
    var_dump((bool) array(12)); // bool(true)
    var_dump((bool) array());   // bool(false)
    var_dump((bool) "false");   // bool(true)
    Toon Meer


    6) Je zou Database::$hasConnection weg kunnen laten en "$this->connection instanceof MySQLi" kunnen gebruiken

    miauw!

  • Tim
    Enlightened
    Ontvangen Reacties
    77
    Berichten
    3.686
    • 5 oktober 2011 om 09:31
    • #19

    Over 1.
    Indien je een fout wilt onderdrukken is dit heel handig!
    Soms wil je geen error laten zien of een vriendelijkere error laten zien!

    Master student IT-recht en Master student Ondernemingsrecht & software ingenieur
    My Personal profile
    My professional profile (LinkedIn/CV)

  • Luc
    Software Engineer
    Ontvangen Reacties
    44
    Berichten
    1.986
    • 6 oktober 2011 om 11:40
    • #20

    Die @staat er omdat mysqli anders zegt dat $host geen variabele mag zijn.

    Verder heb ik de class uitgebreid met query uitvoeren en rows teruggeven. Fetchen etc. komt er nog in.

    Ik zit erover na te denken om voor select, update, delete en insert aparte functies te schrijven.

    Dit is hem tot nu toe:

    PHP
    <?php
    class Database
    {
        private $host = 'localhost';
        private $user = '';
        private $password = '';
        private $database = '';
        private $connection = '';
        private $hasConnection = false;
    	private $queryResult = '';
    	
    	// functie connectie aanmaken met de database
        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;
                }
            } 
        }
    	
    	// functie rijen teruggeven
    	function num_rows($sql = NULL)
        {
            // Kijken of er een query meegegeven is, zo ja uitvoeren
            if($sql != NULL)
    		{
                $this->makeQuery($sql);
    		}
            
            // teruggeven van het aantal rijen.
            return $this->connection->query( $this->queryResult );
        }
    	
    	function makeQuery( $sql )
        {
            // query aanmaken en stoppen in de queryResult
            $this->queryResult = $this->connection->query( $sql, $this->db );
        
            // Kijken of de query uitgevoerd kon worden.
            if(! $this->queryResult )
    		{
    			// nette error meegeven als de query niet uitgevoerd kon worden.
    			throw new Exception('Er is iets misgegaan bij het aanroepen van de query.');
    		}
        }
    }
    ?>
    Toon Meer

    Ik vraag me alleen af of $this->connection->query werkt..

    Verder hoor ik graag verbeter punten etc.

    Website: https://devimo.nl
    Skype: https://join.skype.com/invite/dJyYILTt7Eqh

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!

Maak een account aan Login

ICT Nieuws

  • Fijne feestdagen

    tcbhome 28 december 2025 om 13:55
  • Kritieke update voor Really Simple Security-plug-in

    K.Rens 16 november 2024 om 16:12
  • ING Nederland streeft naar ondersteuning van Google Pay tegen eind februari

    K.Rens 2 november 2024 om 16:09

Blogs

  • Functioneel ontwerp

    Dees 28 december 2014 om 12:38
  • Access Control List implementatie in PHP/MySQL - deel 1/2

    FangorN 28 december 2018 om 12:35
  • Access Control List implementatie in PHP/MySQL - deel 2/2

    FangorN 29 december 2018 om 12:37

Gebruikers die dit topic bekijken

  • 1 Gasten
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacy Policy
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen | Beste Zetes eid kaartlezer webshop
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design