mysql class
ik heb nu dit
Code (php)
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
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
/**
* @author Leon Kuipers
* @copyright 2012
*/
$dbnaam = 'test';
class mysql
{
private $wachtwoord, $verbinding;
public $dbnaam, $regles, $a_regels , $resultaat, $data, $naam;
private $host = 'localhost';
public function setup($naam, $wachtwoord)
{
$this->naam = $naam;
$this->wachtwoord = $wachtwoord;
}
public function mysql_verbinding($db)
{
if(!$this->$naam)
{
$this->naam = 'root';
}
if (isset($this->wachtwoord))
{
$this->wachtwoord = '';
}
$this->dbnaam = $db;
$this->id = mysql_connect($this->host, $this->naam, $this->wachtwoord)
or (mysql_error('Kan geen verbinding maken'));
}
public function database_selecteren($dbnaam)
{
mysql_select_db($db , $this->id) or (mysql_error('Kan de database niet selecteren'));
}
public function query_stukje ($query)
{
$this->resultaat = mysql_query($query, $this->id) or (mysql_error('Kan het stukje data niet ophalen.'));
$this->regels = mysql_num_rows($this->resultaat) or (mysql_error('Er mislukte iets met het tellen.'));
$this->a_regels = mysql_affected_rows($this->resultaat) or (mysql_error('Er ging iets mis met de functie affected_rows.'));
$this->data = mysql_fetch_assoc($this->resultaat) or (mysql_error('Er ging iets mis bij het ophalen van een stukje data.'));
return $this->data[0];
}
public function query_regel ($query)
{
$this->resultaat = mysql_query($query, $this->id) or (mysql_error('Kan de regel data kan niet ophalen.'));
$this->regels = mysql_num_rows($this->resultaat) or (mysql_error('Er mislukte iets met het tellen.'));
$this->a_regels = mysql_affected_rows($this->resultaat) or (mysql_error('Er ging iets mis met de functie affected_rows.'));
$this->data = mysql_fetch_assoc($this->resultaat) or (mysql_error('Er ging iets mis bij het ophalen van een regel data.'));
return $this->data;
}
public function assoc_dupliceren($regel)
{
mysql_data_seek($this->resultaat) or (mysql_error('Er is iets fout gegeaan bij het dupliceren met seek'));
$this->data = mysql_fetch_assoc($this->resultaat) or (mysql_error('Er ging iets mis bij het ophalen van duplo.'));
}
public function update ($query)
{
$this->resultaat = mysql_query($query, $this->id) or (mysql_error('Kan de regel data kan niet updaten.'));
$this->a_regels = mysql_affected_rows($this->result) or (mysql_error('Er ging iets mis met de functie affected_rows.'));
}
public function verwijderen ($query)
{
$this->resultaat = mysql_query($query, $this->id) or (mysql_error('Kan het stukje data verwijderen'));
$this->a_regels = mysql_affected_rows($this->result) or (mysql_error('Er ging iets mis met de functie affected_rows.'));
}
}
?>
/**
* @author Leon Kuipers
* @copyright 2012
*/
$dbnaam = 'test';
class mysql
{
private $wachtwoord, $verbinding;
public $dbnaam, $regles, $a_regels , $resultaat, $data, $naam;
private $host = 'localhost';
public function setup($naam, $wachtwoord)
{
$this->naam = $naam;
$this->wachtwoord = $wachtwoord;
}
public function mysql_verbinding($db)
{
if(!$this->$naam)
{
$this->naam = 'root';
}
if (isset($this->wachtwoord))
{
$this->wachtwoord = '';
}
$this->dbnaam = $db;
$this->id = mysql_connect($this->host, $this->naam, $this->wachtwoord)
or (mysql_error('Kan geen verbinding maken'));
}
public function database_selecteren($dbnaam)
{
mysql_select_db($db , $this->id) or (mysql_error('Kan de database niet selecteren'));
}
public function query_stukje ($query)
{
$this->resultaat = mysql_query($query, $this->id) or (mysql_error('Kan het stukje data niet ophalen.'));
$this->regels = mysql_num_rows($this->resultaat) or (mysql_error('Er mislukte iets met het tellen.'));
$this->a_regels = mysql_affected_rows($this->resultaat) or (mysql_error('Er ging iets mis met de functie affected_rows.'));
$this->data = mysql_fetch_assoc($this->resultaat) or (mysql_error('Er ging iets mis bij het ophalen van een stukje data.'));
return $this->data[0];
}
public function query_regel ($query)
{
$this->resultaat = mysql_query($query, $this->id) or (mysql_error('Kan de regel data kan niet ophalen.'));
$this->regels = mysql_num_rows($this->resultaat) or (mysql_error('Er mislukte iets met het tellen.'));
$this->a_regels = mysql_affected_rows($this->resultaat) or (mysql_error('Er ging iets mis met de functie affected_rows.'));
$this->data = mysql_fetch_assoc($this->resultaat) or (mysql_error('Er ging iets mis bij het ophalen van een regel data.'));
return $this->data;
}
public function assoc_dupliceren($regel)
{
mysql_data_seek($this->resultaat) or (mysql_error('Er is iets fout gegeaan bij het dupliceren met seek'));
$this->data = mysql_fetch_assoc($this->resultaat) or (mysql_error('Er ging iets mis bij het ophalen van duplo.'));
}
public function update ($query)
{
$this->resultaat = mysql_query($query, $this->id) or (mysql_error('Kan de regel data kan niet updaten.'));
$this->a_regels = mysql_affected_rows($this->result) or (mysql_error('Er ging iets mis met de functie affected_rows.'));
}
public function verwijderen ($query)
{
$this->resultaat = mysql_query($query, $this->id) or (mysql_error('Kan het stukje data verwijderen'));
$this->a_regels = mysql_affected_rows($this->result) or (mysql_error('Er ging iets mis met de functie affected_rows.'));
}
}
?>
maar als ik verbinding wil maken krijg ik elkekeer een error. ( ik weet dat me fout afhandeling niet goed is maar dit is nog puur om te testen)!
de errors zijn:
Notice: Undefined variable: naam in C:\wamp\www\_incl\mysql_class.php on line 24
Fatal error: Cannot access empty property in C:\wamp\www\_incl\mysql_class.php on line 24
ik heb de class zo aangeroeppen
Code (php)
als iemand mijn wil helpen ben ik hem dankbaar
Quote:
( ik weet dat me fout afhandeling niet goed is maar dit is nog puur om te testen)
Als je een huis bouwt bouw je toch ook eerst de fundering voor je verder gaat? Foutafhandeling is de basis van PHP zonder foutafhandeling kun jij niet debuggen en kan de gebruiker geen goed gebruik maken van je site. Foutafhandeling is het eerste wat je goed moet hebben, pas dan kun je pas gaan scripten.
Begin dus eerst met een goede foutafhandeling te gebruiken.
En kijk zelf eens naar het verschil tussen wat je hebt op regel 24 en op regel 25, teken voor teken. Valt je dan niks op?
Ook raad ik aan klassenamen met een hoofdletter te beginnen. En eens te gaan kijken naar PDO of MySQLi, hierdoor heb je hetgeen je hierboven hebt helemaal niet meer nodig.
Ook kun je de setup functie veel beter in de constructor zetten.
En waarom definieer je 2 keer $dbnaam? 1 keer is genoeg. Ook kun je mysql_ uit de mysql_ verbinding halen. Aangezien de method in de Mysql klasse zit moet het wel heel raar lopen wil het geen mysql verbinding zijn.
trouwens die ene fout op regel 24 is wel erg dom. ik denk dat ik het over het hoofd heb gezien. als ik er mee klaar ben zal ik het opnieuw posten. nogmaals bedankt voor de snelle reacties.
Toevoeging op 09/05/2012 23:02:29:
wat vinden jullie trouwens van mijn ( indeeling van scripten ) is het overzichtelijk of niet?
Maar zoals ik al aangaf ben ik niet zo'n fan van dit soort database constructies.
Ik zou zoals Wouter J al aangaf meer voor een constructor gaan.
Ook ben ik er meer voor om benamingen in het engels te zetten.
Maar goed, als het een eerste test opzet is, dan kan er nog veel aan verbeterd worden he. Dus zou zeggen als je verder bent, laat hem nog eens bekijken.
EDIT:
Om je een tip te geven in je vervolg poging, kijk eens of je het meer onafhankelijk kunt maken. Dit werkt alleen als je een Mysql database hebt. Maar in OO is je code uitbreidbaar, dus zou logischer zijn als je ook andere soorten databases kunt aanspreken met de zelfde code.
Ik zou daar eens eerst even wat verder over nadenken.
Gewijzigd op 09/05/2012 23:13:03 door Bart V B
Tevens zou ik 1 overkoepelende interface maken die je vervolgens uitbouwt per aparte adapter. Een beetje het adapter pattern:
Code (php)
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
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
<?php
abstract class Database
{
protected $link_id;
protected $host, $user, $pass;
protected $db;
public function __construct($host, $user, $pass, $db)
{
// setters voor host, user, pass en db
}
abstract public function connect();
abstract public function executeQuery($query, array $placeholders = array());
abstract protected function parseQuery($query, array $placeholders = array());
}
class MySQLDataBase extends Database
{
public function connect()
{
$this->link_id = // mysql_connect;
// foutafhandeling
return $this->link_id;
}
public function executeQuery($query, array $placeholders = array())
{
// mysql_query($this->parseQuery($query, $placeholders));
// foutafhandeling
return $result;
}
public function parseQuery($query, array $placeholders = array())
{
// parse query met placeholders
}
}
abstract class PDODatabase extends Database
{
public function executeQuery($query, array $placeholders = array())
{
// $this->link_id->execute($this->parseQuery($query, $placeholders));
// foutafhandeling
return $result;
}
}
class MySQLPDODatabase extends PDODatabase
{
public function connect()
{
// new PDO(...)
}
public function parseQuery($query, array $placeholders = array())
{
$stmt = $this->link_id->prepare($query);
// $stmt->bindParam(...) voor elke placeholder
return $stmt;
}
}
// en zo verder
?>
abstract class Database
{
protected $link_id;
protected $host, $user, $pass;
protected $db;
public function __construct($host, $user, $pass, $db)
{
// setters voor host, user, pass en db
}
abstract public function connect();
abstract public function executeQuery($query, array $placeholders = array());
abstract protected function parseQuery($query, array $placeholders = array());
}
class MySQLDataBase extends Database
{
public function connect()
{
$this->link_id = // mysql_connect;
// foutafhandeling
return $this->link_id;
}
public function executeQuery($query, array $placeholders = array())
{
// mysql_query($this->parseQuery($query, $placeholders));
// foutafhandeling
return $result;
}
public function parseQuery($query, array $placeholders = array())
{
// parse query met placeholders
}
}
abstract class PDODatabase extends Database
{
public function executeQuery($query, array $placeholders = array())
{
// $this->link_id->execute($this->parseQuery($query, $placeholders));
// foutafhandeling
return $result;
}
}
class MySQLPDODatabase extends PDODatabase
{
public function connect()
{
// new PDO(...)
}
public function parseQuery($query, array $placeholders = array())
{
$stmt = $this->link_id->prepare($query);
// $stmt->bindParam(...) voor elke placeholder
return $stmt;
}
}
// en zo verder
?>
Gewijzigd op 09/05/2012 23:28:19 door Wouter J
Persoonlijk zou ik zoals Wouter & Bart ook al aangeven gaan voor de __construct()
en een betere foutafhandeling (ook al is het een 'test')
Kijk bijvoorbeeld eens naar try/catch Exceptions...
Wat ik zelf doe in classes is een soort Debug_mode erin maken zodat je heel veel kan checken en kijken waar het eventueel fout gaat (nu ga ik daarin misschien een beetje ver maar dan weet je in elk geval zeker dat alles 'live' gaat werken)
Gewijzigd op 09/05/2012 23:40:29 door Marco PHPJunky
Quote:
Bart, let wel op hè. Dit is slechts een klasse geen OO. Als je OO gaat heb je naar mijn mening eigenlijk helemaal niet zo'n klasse nodig (op een ORM na dan). Dan 'moet' je werken met dingen als DataMappers enzo.
Nee, uiteraard niet Wouter ;)
Het viel mij gewoon op dat het browseltje van de TS alleen echt maar 1 ding kon doen.
En daar reageerde ik eigenlijk op om hem wat verder er over na te laten denken:
'als het ooit anders gaat worden'.
Ik weet niet hoe ver de TS is in de OO gedachten gang.
Vandaar dat ik het dus ook wat lichtjes bracht zonder meteen met zware, taaie termen te komen. ;)
Overigens ben ik wel gecharmeerd van jou voorbeeld code.
Dat ziet er al een stuk netter uit. Complimenten daarvoor.
Hopende dat de TS hier wat aan heeft. ;)
Code (php)
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
80
81
82
83
84
85
86
87
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
80
81
82
83
84
85
86
87
<?php
/**
* @author Leon Kuipers
* @copyright 2012
*/
class Mysql
{
private $wachtwoord, $verbinding;
public $dbnaam, $regles, $a_regels , $resultaat, $data, $naam, $bericht;
private $host = 'localhost';
public function __construct($naam, $wachtwoord)
{
$this->naam = $naam;
$this->wachtwoord = $wachtwoord;
}
private function error_bericht($bericht)
{
$this->bericht = "<font color=\"#FF0000\"><p>Error: ".$bericht.":";
$this->bericht .= mysql_error();
$this->bericht .= "</font>\n";
die($this->bericht);
}
public function verbinding($dbnaam)
{
if(isset($this->naam))
{
$this->naam = 'root';
}
if (isset($this->wachtwoord))
{
$this->wachtwoord = '';
}
$this->dbnaam = $dbnaam;
$this->id = mysql_connect($this->host, $this->naam, $this->wachtwoord) or $this->error_bericht('Kan geen verbinding maken');
}
public function database_selecteren($dbnaam)
{
mysql_select_db($dbnaam , $this->id) or $this->$this->error_bericht('De database kan niet geselecteerd worden');
}
public function query_stukje ($query)
{
$this->resultaat = mysql_query($query, $this->id) or $this->error_bericht('Er is een probleem met de query om een stukje data op te halen.');
$this->regels = mysql_num_rows($this->resultaat) or $this->error_bericht('Er mislukte iets met het tellen.');
$this->a_regels = mysql_affected_rows($this->resultaat) or $this->error_bericht('Er ging iets mis met de functie affected_rows.');
$this->data = mysql_fetch_assoc($this->resultaat) or $this->error_bericht('Er ging iets mis bij het ophalen van een stukje data.');
return $this->data[0];
}
public function query_regel ($query)
{
$this->resultaat = mysql_query($query, $this->id) or $this->error_bericht('Er is een probleem met de query om de regel data kan niet ophalen.');
$this->regels = mysql_num_rows($this->resultaat) or $this->error_bericht('Er mislukte iets met het tellen.');
$this->a_regels = mysql_affected_rows($this->resultaat) or $this->error_bericht('Er ging iets mis met de functie affected_rows.');
$this->data = mysql_fetch_assoc($this->resultaat) or $this->error_bericht('Er ging iets mis bij het ophalen van een regel data.');
return $this->data;
}
public function assoc_dupliceren($regel)
{
mysql_data_seek($this->resultaat) or $this->error_bericht('Er is iets fout gegeaan bij het dupliceren met seek');
$this->data = mysql_fetch_assoc($this->resultaat) or $this->error_bericht('Er ging iets mis bij het ophalen van duplo.');
}
public function update ($query)
{
$this->resultaat = mysql_query($query, $this->id) or $this->error_bericht('Er is een probleem met de query om de regel data kan niet updaten.');
$this->a_regels = mysql_affected_rows($this->result) or $this->error_bericht('Er ging iets mis met de functie affected_rows.');
}
public function verwijderen ($query)
{
$this->resultaat = mysql_query($query, $this->id) or $this->error_bericht('Er is een probleem met de query om het stukje data verwijderen');
$this->a_regels = mysql_affected_rows($this->result) or $this->error_bericht('Er ging iets mis met de functie affected_rows.');
}
}
?>
/**
* @author Leon Kuipers
* @copyright 2012
*/
class Mysql
{
private $wachtwoord, $verbinding;
public $dbnaam, $regles, $a_regels , $resultaat, $data, $naam, $bericht;
private $host = 'localhost';
public function __construct($naam, $wachtwoord)
{
$this->naam = $naam;
$this->wachtwoord = $wachtwoord;
}
private function error_bericht($bericht)
{
$this->bericht = "<font color=\"#FF0000\"><p>Error: ".$bericht.":";
$this->bericht .= mysql_error();
$this->bericht .= "</font>\n";
die($this->bericht);
}
public function verbinding($dbnaam)
{
if(isset($this->naam))
{
$this->naam = 'root';
}
if (isset($this->wachtwoord))
{
$this->wachtwoord = '';
}
$this->dbnaam = $dbnaam;
$this->id = mysql_connect($this->host, $this->naam, $this->wachtwoord) or $this->error_bericht('Kan geen verbinding maken');
}
public function database_selecteren($dbnaam)
{
mysql_select_db($dbnaam , $this->id) or $this->$this->error_bericht('De database kan niet geselecteerd worden');
}
public function query_stukje ($query)
{
$this->resultaat = mysql_query($query, $this->id) or $this->error_bericht('Er is een probleem met de query om een stukje data op te halen.');
$this->regels = mysql_num_rows($this->resultaat) or $this->error_bericht('Er mislukte iets met het tellen.');
$this->a_regels = mysql_affected_rows($this->resultaat) or $this->error_bericht('Er ging iets mis met de functie affected_rows.');
$this->data = mysql_fetch_assoc($this->resultaat) or $this->error_bericht('Er ging iets mis bij het ophalen van een stukje data.');
return $this->data[0];
}
public function query_regel ($query)
{
$this->resultaat = mysql_query($query, $this->id) or $this->error_bericht('Er is een probleem met de query om de regel data kan niet ophalen.');
$this->regels = mysql_num_rows($this->resultaat) or $this->error_bericht('Er mislukte iets met het tellen.');
$this->a_regels = mysql_affected_rows($this->resultaat) or $this->error_bericht('Er ging iets mis met de functie affected_rows.');
$this->data = mysql_fetch_assoc($this->resultaat) or $this->error_bericht('Er ging iets mis bij het ophalen van een regel data.');
return $this->data;
}
public function assoc_dupliceren($regel)
{
mysql_data_seek($this->resultaat) or $this->error_bericht('Er is iets fout gegeaan bij het dupliceren met seek');
$this->data = mysql_fetch_assoc($this->resultaat) or $this->error_bericht('Er ging iets mis bij het ophalen van duplo.');
}
public function update ($query)
{
$this->resultaat = mysql_query($query, $this->id) or $this->error_bericht('Er is een probleem met de query om de regel data kan niet updaten.');
$this->a_regels = mysql_affected_rows($this->result) or $this->error_bericht('Er ging iets mis met de functie affected_rows.');
}
public function verwijderen ($query)
{
$this->resultaat = mysql_query($query, $this->id) or $this->error_bericht('Er is een probleem met de query om het stukje data verwijderen');
$this->a_regels = mysql_affected_rows($this->result) or $this->error_bericht('Er ging iets mis met de functie affected_rows.');
}
}
?>
ik dacht dat ik zo een mooie faut afhandeling had ( maar krijg een error
Catchable fatal error: Object of class Mysql could not be converted to string in C:\wamp\www\_incl\mysql_class.php on line 46
waarom zou dit niet kunnen ( klinkt misschien dom maar ben nog groen op het gebied vanc classes
Toevoeging op 09/05/2012 23:46:51:
ps heb express een verkeerde databse naam gebruikt om te kijken of het werkte
Code (php)
1
2
3
2
3
<?php
mysql_select_db($dbnaam , $this->id) or $this->$this->error_bericht('De database kan niet geselecteerd worden');
?>
mysql_select_db($dbnaam , $this->id) or $this->$this->error_bericht('De database kan niet geselecteerd worden');
?>
Moet zijn:
Code (php)
1
2
3
2
3
<?php
mysql_select_db($dbnaam , $this->id) or $this->error_bericht('De database kan niet geselecteerd worden');
?>
mysql_select_db($dbnaam , $this->id) or $this->error_bericht('De database kan niet geselecteerd worden');
?>
EDIT:
Marco was me voor. :S
Gewijzigd op 09/05/2012 23:55:53 door Bart V B
Ik zal vonge keer beter kijken.
En weer bedankt voor de sneller reacties
En wij bouwen ook echt geen glimmende code zonder fouten. Degene die dat beweren hebben gewoon een groot alter ego. :P
Zeg altijd maar zo: Hoe meer fouten je maakt, hoe meer je ervan leert.
Fietsen leer je ook pas goed als je het behang van je armen en knieen af rijd.
Ik neem aan dat je toch ook wel eens van je fiets bent gevallen toen je nog klein was en zonder zij wielen het moest gaan doen he. ;)
Zo is het met code schrijven ook. Ieder moment dat je een eureka moment hebt, heb je weer een stapje erbij geleerd.
Gewijzigd op 10/05/2012 00:04:07 door Bart V B
dat is waar, bedankt voor jullie hulp. als ik weer wat stappen verder bend zal ik het weer posten.
Kijk eens naar exceptions voor foutafhandeling, werkt geweldig voor in combinatie met klassen: http://phptuts.nl/view/35/7/
Ook is de font tag zo oud dat die niet meer gebruikt moet worden, vergeet je de paragraph tag af te sluiten en is het beter om enkele quotes in PHP te gebruiken, dan hoef je ook niet te escapen.
Ook de die functie van PHP moet je eigenlijk vergeten.
dank je ik ga er naar kijken.