aan alle goede dingen komt een eind, webmasterplein.net 2003 - 2013
wij danken jullie voor al mooie momenten die dankzij dit forum ontstonden - Derk, Rutger en Stef

[class] Mysql

Deel alles wat je delen kan, gebruik het voor opslag, plaats het omdat je er trots op bent of creëer samen wat moois!

[class] Mysql

Berichtdoor frizzy » 12 apr 2008 08:07

Mischien wel leuk om samen een mysql-class te maken. Mijn OOP is nog niet zo goed, dus ik zal de 1e stap wel helemaal verkeerd doen:
Code: Selecteer alles
class mysql(){
 function getQuery($query, $oneresult = false){
   $get = mysql_query($query)or die('<h3>Mysql Error</h3><p>'.mysql_error().'</p>');
   if(mysql_num_rows($get) !== 0){
       if($oneresult == true){
          return mysql_fetch_assoc($get);
       }
       else{
          $re = array();
          while($verwerk = mysql_fetch_row($get)){
              $re = array_push($re, $verwerk);
          }
        return $re;
       }
   }
   else{
     return false;
   }
 }
}


Succes mannen (en vrouwen) ;)
frizzy
wmpr
 
Berichten: 4261
Geregistreerd: 20 sep 2006 16:03
Woonplaats: Boskoop :D

Re: [class] Mysql

Berichtdoor BetaDevil » 13 apr 2008 20:30

Code: Selecteer alles
<?php
class MySQL
{
    protected
$connection;
    
    function
__destruct()
    {
        
// Sluit de connectie
        
mysql_close($this->connectioN);
    }
    
    function
connect($dbhost, $dbuser, $dbpass = '', $persistancy = false)
    {
        
// Maak een connectie met de database
        
$this->connection = $persistancy ? mysql_pconnect($dbhost, $dbuser, $dbpass) : mysql_connect($dbhost, $dbuser, $dbpass);
        if (!
$this->connection)
        {
            die(
'<h3>MySQL Error</h3><p>' . mysql_error($this->connection) . '</p>');
        }
        
        return
$this->connection;
    }
    
    function
get_query($sql, $oneresult = false)
    {
        
// Haal de query op
        
$query = mysql_query($sql);
        if (!
$query)
        {
            die(
'<h3>MySQL Error</h3><p>' . mysql_error($this->connection) . '</p>');
        }
        
        
// Hebben we wel genoeg rijen?
        
if (mysql_num_rows($get) !== 0)
        {
            if (
$oneresult)
            {
                return
mysql_fetch_assoc($query);
            }
            
            
$return = array();
            while (
$row = mysql_fetch_assoc($query))
            {
                
$return[] = $row;
            }
            
            return
$return;
        }
        
        return
false;
    }
}
?>
BetaDevil
wmpr
 
Berichten: 362
Geregistreerd: 27 nov 2007 18:51

Re: [class] Mysql

Berichtdoor frizzy » 14 apr 2008 15:24

Mischien is het makkelijk om het zo te doen?
Code: Selecteer alles
$gastenboek = new mysql;
$berichten    = $gastenboek->query('SELECT * FROM gastenboek');
if($gastenboek->num_rows == 0){
 echo 'Nog geen berichten';
}
else{
 foreach($gastenboek->fetch as $bericht){
    echo '<h2>'.$bericht['naam'].' zegt:</h2><p>'.$bericht['bericht'].'</p>' ;
 }
}
frizzy
wmpr
 
Berichten: 4261
Geregistreerd: 20 sep 2006 16:03
Woonplaats: Boskoop :D

Re: [class] Mysql

Berichtdoor BetaDevil » 14 apr 2008 17:14

Code: Selecteer alles
<?php
class MySQL
{
    
// Stel onze variablen in
    
protected $dbhost = 'localhost';
    protected
$dbuser = 'root';
    protected
$dbpass = 'password';
    protected
$dbname = 'databasename';
    
    protected
$connection;
    
    public
$num_rows;
    public
$fetch;
    
    function
__construct()
    {
        if (!empty(
$this->dbhost) && !empty($this->dbuser))
        {
            
$this->connect($this->dbhost, $this->dbuser, $this->dbpass);
            
            
// Developer eerst, veiligheid later
            
unset($this->dbpass);
        }
        
        if (
$this->connection && !empty($this->dbname))
        {
            
$this->db_select($this->dbname);
        }
        
        return
true;
    }
    
    function
__destruct()
    {
        
// Sluit de connectie
        
mysql_close($this->connection);
    }
    
    function
connect($dbhost, $dbuser, $dbpass = '', $persistancy = false)
    {
        
// Maak een connectie met de database
        
$this->connection = $persistancy ? mysql_pconnect($dbhost, $dbuser, $dbpass) : mysql_connect($dbhost, $dbuser, $dbpass);
        if (!
$this->connection)
        {
            die(
'<h3>MySQL Error</h3><p>' . mysql_error($this->connection) . '</p>');
        }
        
        return
$this->connection;
    }
    
    function
db_select($dbname)
    {
        if (
$this->connection)
        {
            
// Verbind met de database
            
$db_select = mysql_select_db($dbname, $this->connection);
            if (!
$db_select)
            {
                die(
'<h3>MySQL Error</h3><p>' . mysql_error($this->connection) . '</p>');
            }
            
            
$this->connected = true;
            
            return
true;
        }
        
        return
false;
    }
    
    function
query($sql, $oneresult = false)
    {
        
self::check_connection();
        
        
// Haal de query op
        
$query = mysql_query($sql);
        if (!
$query)
        {
            die(
'<h3>MySQL Error</h3><p>' . mysql_error($this->connection) . '</p>');
        }
        
        if (
substr($sql, 0, 6) == 'SELECT')
        {
            
$this->num_rows = mysql_num_rows($query);
            
            
// Hebben we wel genoeg rijen?
            
if ($this->num_rows > 0)
            {
                
$this->fetch = mysql_fetch_assoc($query);
            }
            else
            {
                
$this->fetch = false;
            }
            
            
mysql_free_result($query);
            
            return
true;
        }
        
        return
mysql_affected_rows($query);
    }
    
    protected static function
check_connection()
    {
        if (
$this->connected)
        {
            return
true;
        }
        
        die(
'<h3>MySQL Error</h3><p>Geen verbinding gemaakt met de server</p>');
    }
}
?>
BetaDevil
wmpr
 
Berichten: 362
Geregistreerd: 27 nov 2007 18:51

Re: [class] Mysql

Berichtdoor frizzy » 14 apr 2008 17:27

Waarom gebruik je soms self:: en soms $this->, zit daar verschil tussen?
frizzy
wmpr
 
Berichten: 4261
Geregistreerd: 20 sep 2006 16:03
Woonplaats: Boskoop :D

Re: [class] Mysql

Berichtdoor libia » 14 apr 2008 19:49

waarom niet gewoon mysqli gebruiken?
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

Re: [class] Mysql

Berichtdoor frizzy » 14 apr 2008 19:50

Waarom makkelijk doen als het ook moeilijk kan ;)
frizzy
wmpr
 
Berichten: 4261
Geregistreerd: 20 sep 2006 16:03
Woonplaats: Boskoop :D

Re: [class] Mysql

Berichtdoor libia » 14 apr 2008 19:51

frizzy schreef:Waarom makkelijk doen als het ook moeilijk kan ;)

dat is idd wat ik bedoel :P
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

Re: [class] Mysql

Berichtdoor frizzy » 14 apr 2008 19:52

Ik doe het vooral om beter te worden in OOP. Ik snap nog niet helemaal het 'nut' er van.
frizzy
wmpr
 
Berichten: 4261
Geregistreerd: 20 sep 2006 16:03
Woonplaats: Boskoop :D

Re: [class] Mysql

Berichtdoor libia » 14 apr 2008 20:02

het 'nut' ervan is eigenlijk voornamelijk hetzelfde als het nut van functies, alleen bij klasses kunnen die functies dan nog samenwerken..
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

Re: [class] Mysql

Berichtdoor frizzy » 14 apr 2008 20:04

Voor zover ik weet klopt dat niet helemaal. Het gaat meer uit van een 'object' (bijvoorbeeld een stukje tekst die een gebruiker verzonden heeft) waarmee je dingen gaat processen. Maja, ik kan het fout hebben.
frizzy
wmpr
 
Berichten: 4261
Geregistreerd: 20 sep 2006 16:03
Woonplaats: Boskoop :D

Re: [class] Mysql

Berichtdoor libia » 14 apr 2008 20:06

er zijn meer doelen mee.. ik gaf alleen een voorbeeld ;)
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

Re: [class] Mysql

Berichtdoor frizzy » 14 apr 2008 20:08

Ok ;)
frizzy
wmpr
 
Berichten: 4261
Geregistreerd: 20 sep 2006 16:03
Woonplaats: Boskoop :D

Re: [class] Mysql

Berichtdoor Remi » 15 apr 2008 15:35

Het grote voordeel van OOP is dat het veel makkelijker te onderhouden is. En als je samen werkt aan een project is OOP toch weer iets fijner.

Een klasse is eigenlijk niks anders dan een blauwdruk voor een object.
Avatar gebruiker
Remi
wmpr
 
Berichten: 3010
Geregistreerd: 04 apr 2006 15:22

Re: [class] Mysql

Berichtdoor DoubleJ » 19 apr 2008 11:01

frizzy schreef:Ik doe het vooral om beter te worden in OOP. Ik snap nog niet helemaal het 'nut' er van.

Ok, stel je zelf eens de volgende situatie voor.
Je maakt, samen met een paar andere mensen een programma, iedereen weet wat hij moet maken en iedereen gaat lekker los van elkaar bezig.
Stel dat persoon A en persoon B het bijde makkelijk vinden om in hun stukje code een 'print' functie op te nemen.

Nu is het bij functie geörienteerd programeren een probleem, want als persoon A en B bijde de functie print in hun deel toevoegen, dan zal dat conflicten gaan opleveren, welke print() moeten we gebruiken.

Echter wanneer iedereen afspreekt om zijn eigen 'class'/'object' te maken, dan spreek je gewoon met elkaar de class/object namen af, en als persoon A en persoon B, bijde een print functie invoegen, dan zorgt die niet voor onderlinge conflicten.

-> Dat is onder andere 1 voordeel.

Een ander voordeel zoals al werd aangehaald is onderhouden.
Als je ergens een bepaalde class gebruikt -> hoef je voor die functies alleen de class aan te passen voor bijvoorbeeld bug fixes enzo.

Een ander voorbeeld is uitbreidbaarheid. Stel je hebt een class 'mysql' in deze class zitten functies voor query/connect etc. Maar jij wil graag caching toevoegen, in plaats van dat je dan het wiel opnieuw gaat uitvinden en de hele mysql class gaat herschrijven, 'extend' je de class gewoon met je cache functies bv: class mysql_cached extends mysql { } en dan heb je alle functies en velden van je vorige object ergewoon in zitten, en kun je hem met je cache functies gaan uitbreiden.

Daarnaast zorgt het er ook voor dat je code en dergelijke beter gaat organiseren. Eerst deed je misschien functies die bij elkaar hoorden in verschillende files, nu groepeer je je methodes/functies en parameters/variabelen of hoe je het ook wilt noemen(jammer dat er nog niet echt een standaard benaming voor alle talen is) in een class/object. Dus je zorgt ook voor overzichtelijkere code, alles wat bij elkaar hoort staat in 1 class.

Hoop dat dit even wat meer inzicht heeft gegeven in de voordelen van object georiënteerd programeren.
De wondere wereld van het wijde web.
Avatar gebruiker
DoubleJ
wmpr
 
Berichten: 253
Geregistreerd: 20 jan 2008 20:32

Re: [class] Mysql

Berichtdoor libia » 17 mei 2008 14:58

laat ik dit onderwerp maar weer wat opkrikken :)
de klassen
Code: Selecteer alles
<?php
class mysql
{
    private
$conn;
    public function
__construct($server, $name, $pass, $database)
    {
        
$this->conn = new mysqli($server, $name, $pass, $database);
    }
    
    public function
autocommit($mode)
    {
        
$this->conn->autocommit($mode);
    }
    
    public function
commit()
    {
        
$this->conn->commit();
    }
    
    public function
rollback()
    {
        
$this->conn->rollback();
    }
    
    public function
query($query)
    {
        return new
query($query, $this->conn);
    }
    
    public function
__destruct()
    {
        
$this->conn->close();
    }
}

class
query extends mysql
{
    private
$conn;
    private
$query;
    private
$return;
    public function
__construct($query, &$conn)
    {
        
$this->conn = $conn;
        
$this->query = $this->conn->query($query);
    }
    
    public function
fetch()
    {
        while(
$row = $this->query->fetch_assoc())
        {
            
$this->return[] = $row;
        }
        return
$this->return;
    }
    
    public function
__destruct()
    {
        
$this->query->close();
    }
}
?>

en een voorbeeld hoe je het gebruikt,
Code: Selecteer alles
<?php
$conn
= new mysql('localhost', 'root', '', 'home');
$query = "SELECT
                pName
            FROM
                user"
;
$qQuery = $conn->query($query);
$result = $qQuery->fetch();
foreach(
$result as $row)
{
    echo
$row['pName'] . '<br />';
}
$qQuery = null;
$conn = null;
?>


volgensmij is het alleen een beetje zinloos, je kunt net zo goed mysqli of pdo gebruiken, is precies hetzelfde (natuurlijk uitgebreider, maar qua functies die ik nu ff heb geschreven ongeveer hetzelfde) en waarschijnlijk ook wel sneller dan een zelfgemaakte klasse..
maar veel plezier ermee ;)
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

Re: [class] Mysql

Berichtdoor BetaDevil » 17 mei 2008 17:17

libia schreef:volgensmij is het alleen een beetje zinloos, je kunt net zo goed mysqli of pdo gebruiken, is precies hetzelfde (natuurlijk uitgebreider, maar qua functies die ik nu ff heb geschreven ongeveer hetzelfde) en waarschijnlijk ook wel sneller dan een zelfgemaakte klasse..
maar veel plezier ermee ;)

Je pakt de standaard mysqli-class die in php zit en stopt die in een andere class waardoor je maar een paar functies kan gebruiken. Dat is inderdaad een beetje zinloos :ugeek:
BetaDevil
wmpr
 
Berichten: 362
Geregistreerd: 27 nov 2007 18:51

Re: [class] Mysql

Berichtdoor libia » 17 mei 2008 18:13

en dan moet je natuurlijk alles afgaan, je kunt het ook zonder de mysqli klasse doen maar met de standaard mysql, maarja.. je moet alsnog alles af, en hoe zou je het anders doen?
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!

Re: [class] Mysql

Berichtdoor BetaDevil » 17 mei 2008 19:06

Nee, het gaat erom dat je beter gewoon de MySQLi-class in PHP kan gebruiken dan dat je het op jouw manier doet. Misschien dat je de class nog wat wilt uitbreiden maar als je het in een andere class stopt dan zul je zien dat je veel functionaliteit weglaat.
BetaDevil
wmpr
 
Berichten: 362
Geregistreerd: 27 nov 2007 18:51

Re: [class] Mysql

Berichtdoor libia » 18 mei 2008 09:08

dat snap ik ja, maar het onderwerp van dit topic is het maken van een mysql class.. dat doe ik dus.. ben alleen gewend om mysqli te gebruiken, daarom is het dus teveel moeite voor mij om het zonder mysqli te doen :)
Avatar gebruiker
libia
wmpr
 
Berichten: 4149
Geregistreerd: 23 okt 2005 14:14
Woonplaats: Alphe!!


Keer terug naar Snippets



cron