mijn eerste class ..
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
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
<?php
class mysql
{
var $Host;
var $Db_user;
var $Db_pass;
var $Db_name;
var $Db_connection;
var $query_result;
var $query;
// connectie functie
function db_connect()
{
if (!$Db_connection = mysql_connect($Host, $Db_user, $Db_pass, $Db_name))
{
echo 'kan geen verbinding maken';
exit;
}
if (!mysql_select_db($Db_name, $Db_connection))
{
echo 'kan database niet selecteren';
exit;
}
return $Db_connection;
}
// query functie
function query($query)
{
if (!$query_result = mysql_query($query, $Db_connection))
{
echo 'kon query niet uitvoeren';
exit;
}
return $query_result;
}
function fetch()
{
// fetchen
}
function afsluiten()
{
// verbinding sluiten
}
}
?>
class mysql
{
var $Host;
var $Db_user;
var $Db_pass;
var $Db_name;
var $Db_connection;
var $query_result;
var $query;
// connectie functie
function db_connect()
{
if (!$Db_connection = mysql_connect($Host, $Db_user, $Db_pass, $Db_name))
{
echo 'kan geen verbinding maken';
exit;
}
if (!mysql_select_db($Db_name, $Db_connection))
{
echo 'kan database niet selecteren';
exit;
}
return $Db_connection;
}
// query functie
function query($query)
{
if (!$query_result = mysql_query($query, $Db_connection))
{
echo 'kon query niet uitvoeren';
exit;
}
return $query_result;
}
function fetch()
{
// fetchen
}
function afsluiten()
{
// verbinding sluiten
}
}
?>
Ik heb nog nooit een class gemaakt , maar ik vond dat ik er gewoon echt een nodig had voor mijn verbinding. ( ik moest het toch eens proberen..)
Dus ik heb deze code tot nu toe gemaakt .
#Vraag1 : doe ik het op zo'n manier een beetje goed? , en/of wat is er fout..
#vraag2: Ik heb wat bij anderre classes gekeken , en volgens mij gaat een aanroep ongeveer zo:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
$mysql = new mysql();
$mysql->db_connect()
$mysql->query("SELECT * FROM table WHERE iets='iets'");
$mysql->fetch();
$mysql->afsluiten();
?>
$mysql = new mysql();
$mysql->db_connect()
$mysql->query("SELECT * FROM table WHERE iets='iets'");
$mysql->fetch();
$mysql->afsluiten();
?>
Maar hoe zit dat als je meerdere querys op je pagina uitvoert ?? ( de querynamen moeten dan toch uniek zijn?)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$mysql = new mysql();
$mysql->db_connect()
$result = $mysql->query("SELECT * FROM table WHERE iets='iets'");
$result2 = $mysql->query("SELECT * FROM table WHERE iets='ietsanders'");
$fetch = $mysql->fetch( $result );
$fetch2 = $mysql->fetch( $result2 );
$mysql->afsluiten();
?>
$mysql = new mysql();
$mysql->db_connect()
$result = $mysql->query("SELECT * FROM table WHERE iets='iets'");
$result2 = $mysql->query("SELECT * FROM table WHERE iets='ietsanders'");
$fetch = $mysql->fetch( $result );
$fetch2 = $mysql->fetch( $result2 );
$mysql->afsluiten();
?>
Gewijzigd op 01/04/2006 16:38:00 door Pim Vernooij
Voor de rest is het vaak handiger ipv echo return in een functie te gebruiken. En dan het object te echoën.
Edit
Nog beter is om het object in een var output te stoppen, en die op het eind pas te echoën... Kan je header gebruiken :)
Maar daar moet je dan wel in het begin van je site dus al rekening mee houden.
Gewijzigd op 01/04/2006 16:41:00 door Willem Jan Z
Ik zou de fetch methode vervangen door:
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
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
<?php
/*
Haalt verschillende resultaten uit een query resultaat
*/
function get_result( $_sMode = '',
$_rQuery_result = false,
$_iRow_number = 0 )
{
$_rQuery_result = ( ( $_rQuery_result !== false ) ? $_rQuery_result : ( isset($this->_rQuery_result) ? $this->_rQuery_result : 0 ) );
switch( $_sMode )
{
# Geeft het aantal rijen in een resultaat (Voor SELECT queries)
case 'num_rows':
return @mysql_num_rows($_rQuery_result);
# Geeft het aantal betrokken rijen in de vorige MySQL operatie (Voor DELETE, INSERT, REPLACE, of UPDATE queries)
case 'affected_rows':
return @mysql_affected_rows($this->_rLink_id);
# Geeft het aantal velden in een resultaat
case 'num_fields':
return @mysql_num_fields($_rQuery_result);
# Geef het id dat gegenereerd werd door de vorige INSERT query
case 'insert_id':
return @mysql_insert_id($this->_rLink_id);
# Verplaats interne resultaat pointer
case 'data_seek':
return @mysql_data_seek($_rQuery_result, $_iRow_number);
# Haal een resultaat rij op als een associatieve array
case 'fetch_assoc':
return @mysql_fetch_assoc($_rQuery_result);
# Haal de resultaat rijen op als een associatieve 2d array
case 'fetch_rowset_assoc':
$aResult = array();
while( $mRow = @mysql_fetch_assoc($_rQuery_result) )
{
$aResult[] = $mRow;
}
return $aResult;
# Haal een resultaat rij op als een genummerde array
case 'fetch_row':
return @mysql_fetch_row($_rQuery_result);
# Haal de resultaat rijen op als een genummerde 2d array
case 'fetch_rowset':
$aResult = array();
while( $mRow = @mysql_fetch_row($_rQuery_result) )
{
$aResult[] = $mRow;
}
return $aResult;
default:
die('CMysql::get_result(): Er is een verkeerde mode geselecteerd');
}
}
?>
/*
Haalt verschillende resultaten uit een query resultaat
*/
function get_result( $_sMode = '',
$_rQuery_result = false,
$_iRow_number = 0 )
{
$_rQuery_result = ( ( $_rQuery_result !== false ) ? $_rQuery_result : ( isset($this->_rQuery_result) ? $this->_rQuery_result : 0 ) );
switch( $_sMode )
{
# Geeft het aantal rijen in een resultaat (Voor SELECT queries)
case 'num_rows':
return @mysql_num_rows($_rQuery_result);
# Geeft het aantal betrokken rijen in de vorige MySQL operatie (Voor DELETE, INSERT, REPLACE, of UPDATE queries)
case 'affected_rows':
return @mysql_affected_rows($this->_rLink_id);
# Geeft het aantal velden in een resultaat
case 'num_fields':
return @mysql_num_fields($_rQuery_result);
# Geef het id dat gegenereerd werd door de vorige INSERT query
case 'insert_id':
return @mysql_insert_id($this->_rLink_id);
# Verplaats interne resultaat pointer
case 'data_seek':
return @mysql_data_seek($_rQuery_result, $_iRow_number);
# Haal een resultaat rij op als een associatieve array
case 'fetch_assoc':
return @mysql_fetch_assoc($_rQuery_result);
# Haal de resultaat rijen op als een associatieve 2d array
case 'fetch_rowset_assoc':
$aResult = array();
while( $mRow = @mysql_fetch_assoc($_rQuery_result) )
{
$aResult[] = $mRow;
}
return $aResult;
# Haal een resultaat rij op als een genummerde array
case 'fetch_row':
return @mysql_fetch_row($_rQuery_result);
# Haal de resultaat rijen op als een genummerde 2d array
case 'fetch_rowset':
$aResult = array();
while( $mRow = @mysql_fetch_row($_rQuery_result) )
{
$aResult[] = $mRow;
}
return $aResult;
default:
die('CMysql::get_result(): Er is een verkeerde mode geselecteerd');
}
}
?>
Hierdoor kun je in de toekomst nog bijvoorbeeld een PostGreSQL klasse bouwen. Waardoor je niets in de code zelf hoeft te veranderen.
Gewijzigd op 01/04/2006 16:45:00 door Martijn B
Dan maak je voor elke verschillende soort database die je gebruikt ( PostgreSQL, MSQL, MySQL you name it ) weer een class met de database specifieke uitwerkingen.
Daarna, voor in je applicatie dus, maar je functies als getNamen() of getArtikel() ed.
Dus niet meer echt de query zelf uitvoeren, dat gebeurt dan al ik de functie.
Ik was er een tijdje geleden aan bezig, maar heb niet zo veel tijd eigenlijk :+
Maar de manier waarop ik het doe is verder wel goed heb ik hieruit begrepen..
Van Pim, heb ik begrepen overigens hoe ik meerdere querys kan doen.
En de rest van reply's geven ook zeker een paar goede tips .
ik ga absoluut de class voor een groot gedeelte opnieuw opbouwen , met de suggesties die jullie hebben ..
Ik wil namelijk niet meer 'steeds' hele rijen van ( vrijwel) dezelfde code voor querys onder elkaar hoeven zetten... en dat kan hier zeker mee bereiken!
Bedankt , voor de snelle reply's .. ik ga hier zeker mee verder experimenteren!
Succes met OOP! als je het eenmaal onder de knie hebt, wil je niet meer anders ;-)