Object georienteerd programmeren in PHP
Door Winston Smith, 24 jaar geleden, 12.020x bekeken
Korte inleiding in het object georienteerd programmeren met PHP.
Gesponsorde koppelingen
Inhoudsopgave
Er zijn 39 reacties op 'Object georienteerd programmeren in php'
Gesponsorde koppelingen
Objecten :D
Dit is mijn database script (de standaard dan :))
Dit is mijn database script (de standaard dan :))
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
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
<?php
# Filename : database.php
# Author : Mitch Vroege
# Projectname : nvt
# Projectversion : nvt
# Releasedate : nvt
class Database
{
# Database vars
var $user = "User";
var $pass = "Pass";
var $host = "localhost";
var $name = "DBname";
# Functie die mysql_num_rows teruggeeft
function num_rows($sql)
{
$this->connect();
$res = mysql_query($sql);
$aantal = mysql_num_rows($res);
mysql_close();
return $aantal;
}
# Functie de mysql_fetch_array teruggeeft
function get_array($sql)
{
$this->connect();
$res = mysql_query($sql);
while($data = mysql_fetch_array($res))
$row[] = $data;
mysql_close();
return $row;
}
# Zelfde als hierboven maar dan 1 row
function get_single($sql)
{
$this->connect();
$res = mysql_query($sql);
$data = mysql_fetch_array($res);
mysql_close();
return $data;
}
# Functie die een normale query runt
function execute($sql)
{
$this->connect();
$res = mysql_query($sql);
mysql_close();
return $res;
}
# Functie die de database connectie maakt
function connect()
{
return mysql_select_db($this->name, mysql_connect($this->host, $this->user, $this->pass));
}
}
?>
# Filename : database.php
# Author : Mitch Vroege
# Projectname : nvt
# Projectversion : nvt
# Releasedate : nvt
class Database
{
# Database vars
var $user = "User";
var $pass = "Pass";
var $host = "localhost";
var $name = "DBname";
# Functie die mysql_num_rows teruggeeft
function num_rows($sql)
{
$this->connect();
$res = mysql_query($sql);
$aantal = mysql_num_rows($res);
mysql_close();
return $aantal;
}
# Functie de mysql_fetch_array teruggeeft
function get_array($sql)
{
$this->connect();
$res = mysql_query($sql);
while($data = mysql_fetch_array($res))
$row[] = $data;
mysql_close();
return $row;
}
# Zelfde als hierboven maar dan 1 row
function get_single($sql)
{
$this->connect();
$res = mysql_query($sql);
$data = mysql_fetch_array($res);
mysql_close();
return $data;
}
# Functie die een normale query runt
function execute($sql)
{
$this->connect();
$res = mysql_query($sql);
mysql_close();
return $res;
}
# Functie die de database connectie maakt
function connect()
{
return mysql_select_db($this->name, mysql_connect($this->host, $this->user, $this->pass));
}
}
?>
Het is niet echt object georienteerd in de zin dat het geen meervoudige overerving, interfaces, abstracte klassen, overloading, privacy en destructors ondersteund. Wel kan je verketende subclassificatie gebruiken in PHP 4.
Met de komst van PHP 5 echter zijn enkele van voorgenoemde aspecten van OOP wel opgenomen en komt PHP dus een stuk dichter bij het zijn van een 'echte' object georienteerde programmeertaal.
Daarnaast kan je je afvragen of je bovengenoemde aspecten wel nodig hebt. Vaak zijn er meerdere wegen die naar Rome leiden en bij een simpel project kan je ook wel zonder de diepergaande functionaliteiten van OOP. Feit is, dat de basisfunctionaliteit van OOP aanwezig is.
-- Met dank aan 'Het complete HANDboek PHP4 -- ;)
Met de komst van PHP 5 echter zijn enkele van voorgenoemde aspecten van OOP wel opgenomen en komt PHP dus een stuk dichter bij het zijn van een 'echte' object georienteerde programmeertaal.
Daarnaast kan je je afvragen of je bovengenoemde aspecten wel nodig hebt. Vaak zijn er meerdere wegen die naar Rome leiden en bij een simpel project kan je ook wel zonder de diepergaande functionaliteiten van OOP. Feit is, dat de basisfunctionaliteit van OOP aanwezig is.
-- Met dank aan 'Het complete HANDboek PHP4 -- ;)
Nee, ik had PHP 5 geinstalleerd naast mijn PHP 4, en dat werkte wel even. Belangrijkste waarom ik php 5 weer even op non-actief heb gesteld was dat MySQL functies op dat moment nog wat bugs vertoonden.
@Mitch: C++ is inderdaad leuk ;) Vooral Visual C++, wat ik zelf ook nog moet leren, lijkt me wel cool! Probleem is alleen dat ik vaak in linux zit en de meeste handelingen voor Windows zijn geschreven :(
@Mitch: C++ is inderdaad leuk ;) Vooral Visual C++, wat ik zelf ook nog moet leren, lijkt me wel cool! Probleem is alleen dat ik vaak in linux zit en de meeste handelingen voor Windows zijn geschreven :(
Ja, de normale C++ had ik ook uit zo'n groot boek geleerd. C++ in 21 dagen heette het geloof ik. Maar was wel straffe kost om daar doorheen te komen. Heb toen ook maar een basiscursusboekje C++ aangeschaft, en dat ging een stuk makkelijker.
Maar ja, je ziet minder snel resultaat dan bij PHP he :) Maar als je goed oefent, kan je er ook leukere dingen mee doen dan met PHP denk ik.
Wil nog eens een progje schrijven in C++ waarmee je een lcd scherm kan aansturen en eentje waarmee je een gsm kan bedienen (voor adresboek en smsjes bijhouden via de pc of sms sturen vanaf de pc).
Dat duurt vast nog wel even voordat dat lukt :)
Maar ja, je ziet minder snel resultaat dan bij PHP he :) Maar als je goed oefent, kan je er ook leukere dingen mee doen dan met PHP denk ik.
Wil nog eens een progje schrijven in C++ waarmee je een lcd scherm kan aansturen en eentje waarmee je een gsm kan bedienen (voor adresboek en smsjes bijhouden via de pc of sms sturen vanaf de pc).
Dat duurt vast nog wel even voordat dat lukt :)
Mitch, Visual basic is een makkelijke taal, een leuke taal maar wel een ontiegelijk trage taal. Bijvoorbeeld; probeer eens een syntax highlighter te schrijven voor een RichtTextBox. Duurt makkelijk een minuut lbij een normaal bestand om er doorheen te werken. Dezelfde implementatie in C++ was vele malen sneller, omdat je daar niet tig abstractie lagen hebt te gebruiken. Nadeel is wel de steilere leer curve.
Daarnaast is VB alleen beschikbaar voor Windows (toch?).
En ik wil mijn programmatuur graag compatibel maken met Linux, omdat ik daar vaak in werk.
Maar ik las vandaag inderdaad dat de IDE en dan vooral de COM-objecten erg makkelijk te gebruiken zijn in VB. Misschien toch maar eens proberen dan...
En ik wil mijn programmatuur graag compatibel maken met Linux, omdat ik daar vaak in werk.
Maar ik las vandaag inderdaad dat de IDE en dan vooral de COM-objecten erg makkelijk te gebruiken zijn in VB. Misschien toch maar eens proberen dan...
PHP is vooralsnog niet echt OO te noemen in de zin dat je er geen ene reet aan hebt. Ik programmeer liever in generieke functies dan overal een klasse te gaan creeeren puur om er 1 functie van aan te roepen... als er nu (multi) inheritance etc in komt ga ik het misschien overwegen... tot nu toe vind ik het niet zo werken als ik in bv Delphi gewend ben.
@Mitch: in je functie om rows te tellen met mysql_num_rows laat je de query eerst nog 'ns uitvoeren?
Lekker is dat....
En bij het fetchen ook nog 'ns?
Stel je voor dat ik dit wil:
- Een heleboel data selecteren (500.000 rows bv.)
- Tellen hoeveel ik nu precies geselecteerd heb
- Die data fetchen en gebruiken voor iets
Dan voer ik dus 3x dezlfde query uit! (ik moet toegeven dat de eerste overbodig is, maar misschien wil ike r nog wel iets mee doen wat niet kan met je class)...
Verder vind ik het vreemd om 'n class te maken om te connecten met je database....
Dat is ??n functie, daar ga je toch geen class voor maken? Had liever uitgelegd hoe het werkt om 'n complete db-class te maken.
Dan had je ook dingen als $this kunnen bespreken.
Lekker is dat....
En bij het fetchen ook nog 'ns?
Stel je voor dat ik dit wil:
- Een heleboel data selecteren (500.000 rows bv.)
- Tellen hoeveel ik nu precies geselecteerd heb
- Die data fetchen en gebruiken voor iets
Dan voer ik dus 3x dezlfde query uit! (ik moet toegeven dat de eerste overbodig is, maar misschien wil ike r nog wel iets mee doen wat niet kan met je class)...
Verder vind ik het vreemd om 'n class te maken om te connecten met je database....
Dat is ??n functie, daar ga je toch geen class voor maken? Had liever uitgelegd hoe het werkt om 'n complete db-class te maken.
Dan had je ook dingen als $this kunnen bespreken.
Gebruik zelf ook een klasse voor een db connectie, altijd handig omdat je hem dan kan hergebruiken:
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
<?php
/*
* @desc MySQL Database Engine.
* @version 1.0 [30-03-2004]
*/
class Database
{
var $sHost; //Hostname
var $sDatabase; //Databasename
var $sUser; //Username
var $sPassword; //Password
var $aRecord = Array(); //Current record
var $iRow; //Current row
var $bAutoFree = True; //Autofree query
var $bDebug = False; //Toggle debugging
var $bShowErrors = True; //Toggle showing errors
var $iErrorNr; //Last MySQL Errornr
var $sError; //Last MySQL Error
var $iConnectionID; //Current connectionid
var $iQueryID; //Current queryid
/**
* @return void
* @param $sHost String
* @param $sDatabase String
* @param $sUser String
* @param $sPassword String
* @param $bDebug Boolean
* @desc Database class constructor.
*/
function Database($sHost = '', $sDatabase = '', $sUser = '', $sPassword = '',$bDebug = False, $bShowErrors = True)
{
$this->bDebug = $bDebug;
$this->bShowErrors = $bShowErrors;
$this->Connect($sHost, $sDatabase, $sUser, $sPassword);
}
/**
* @return Integer [ConnectionID]
* @param $sHost String
* @param $sDatabase String
* @param $sUser String
* @param $sPassword String
* @desc Establish a connection and select a database
*/
function Connect($sHost = '', $sDatabase = '', $sUser = '', $sPassword = '')
{
$this->sHost = $sHost;
$this->sDatabase = $sDatabase;
$this->sUser = $sUser;
$this->sPassword = $sPassword;
// Establish connection and select database.
if (! $this->iConnectionID)
{
$this->iConnectionID = @mysql_connect($this->sHost, $this->sUser, $this->sPassword);
if (!$this->iConnectionID)
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$this->Error("No connection with host: " . $this->sHost);
return 0;
}
if (!@mysql_select_db($this->sDatabase,$this->iConnectionID))
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$this->Error("No connection with database: " . $this->sDatabase);
$this->Disconnect();
return 0;
}
}
return $this->iConnectionID;
}
/**
* @return Integer
* @desc Disconnect from server.
*/
function Disconnect()
{
if($this->iConnectionID <> 0)
{
@mysql_close($this->iConnectionID);
$this->iConnectionID = 0;
return 1;
}
else
{
return 0;
}
}
/**
* @return Integer [QueryID]
* @param $sQuery String
* @param $Line Line parameter
* @param $File File parameter
* @desc Execute a query.
*/
function Query($sQuery, $Line = '', $File = '')
{
if(!$this->iConnectionID)
{
$this->Error("No connection with MySQL database.");
return False;
}
// Accept no empty query.
if ($sQuery == '')
{
return 0;
}
// New query, discard previous result.
if ($this->iQueryID)
{
$this->free();
}
if ($this->bDebug == True)
{
print "Debug: Query = " . $sQuery . "<br>";
}
$this->iQueryID = @mysql_query($sQuery,$this->iConnectionID);
$this->iRow = 0;
if (! $this->iQueryID)
{
if($this->bShowErrors)
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$this->Error("Invalid SQL: " . $sQuery, $Line, $File);
}
}
// Will return nothing if it fails.
return $this->iQueryID;
}
/**
* @return Integer [QueryID]
* @param $sQuery String
* @param $iStartRow Integer
* @param $Line Line parameter
* @param $File File parameter
* @param $iNumRows Integer
* @desc Execute a query with limited result.
*/
function LimitQuery($sQuery, $iStartRow = 0, $iNumRows = 10, $Line = '', $File = '')
{
$iStartRow = intval($iStartRow);
$iNumRows = intval($iNumRows);
if ($iStartRow == 0)
{
$sQuery .= ' LIMIT ' . $iNumRows;
}
else
{
$sQuery .= ' LIMIT ' . $iStartRow . ',' . $iNumRows;
}
return $this->Query($sQuery, $Line, $File);
}
/**
* @return void
* @desc Free the query-result.
*/
function Free()
{
@mysql_free_result($this->iQueryID);
$this->iQueryID = 0;
}
/**
* @return Boolean [Another row found?]
* @desc Move to the next row in the recordset.
*/
function NextRecord()
{
if (!$this->iQueryID)
{
$this->Error("NextRecord called with no query pending.");
return 0;
}
$this->aRecord = @mysql_fetch_array($this->iQueryID);
$this->iRow += 1;
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$bStat = is_array($this->aRecord);
if (!$bStat && $this->bAutoFree)
{
$this->Free();
}
return $bStat;
}
/**
* @return Boolean
* @param $iPosition Integer
* @desc Move to given position in recordset.
*/
function SetPosition($iPosition = 0)
{
if (!$this->iQueryID)
{
$this->Error("SetPosition($iPosition) called with no query pending.");
return 0;
}
if (@mysql_data_seek($this->iQueryID, $iPosition))
{
$this->iRow = $iPosition;
}
else
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
@mysql_data_seek($this->iQueryID, 0);
$this->Row = 0;
$this->Error("SetPosition($iPosition) failed: recordset has only " . $this->NumRows() . " rows");
return 0;
}
return 1;
}
/**
* @return String Fieldvalue
* @param $sFieldName String
* @desc Retrieve the value of a field
*/
function Data($sFieldName)
{
if ($this->iQueryID)
{
return $this->aRecord[$sFieldName];
}
return 0;
}
/**
* @return String [dd-mm-yyyy]
* @param $sDate [yyyy-mm-dd] String
* @desc Converts MySQL date to dd-mm-yyyy date and vice versa.
*/
function ConvertDate($sDate)
{
$aNormal = explode("-",$sDate);
$bStat = is_array($aNormal);
if ($bStat)
{
return $aNormal[2] . "-" . $aNormal[1] . "-" . $aNormal[0];
}
return 0;
}
/**
* @return Integer [Number of rows]
* @desc Number of rows in current recordset.
*/
function NumRows()
{
if ($this->iQueryID)
{
return @mysql_num_rows($this->iQueryID);
}
return 0;
}
/**
* @return Integer
* @desc Retrieve last inserted ID, only use after insert-query.
*/
function LastInsertedID()
{
if ($this->iQueryID)
{
return @mysql_insert_id($this->iConnectionID);
}
return 0;
}
/**
* @return Boolean
* @param $sTable String
* @param $sMode String
* @desc Lock a table.
*/
function Lock($sTable, $sMode = 'Write')
{
if ($this->iConnectionID <> 0)
{
$sQuery = "LOCK TABLE " . "$sTable $sMode";
$bResult = @mysql_query($sQuery, $this->iConnectionID);
if (!$bResult)
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$this->Error("Lock($sTable, $sMode) failed.");
return 0;
}
return $bResult;
}
else
{
$this->Error("Lock($sTable, $sMode) called, while there's no connection.");
return 0;
}
}
/**
* @return Boolean
* @desc Unlock all tables.
*/
function Unlock()
{
if ($this->iConnectionID <> 0)
{
$bResult = @mysql_query("UNLOCK TABLES", $this->iConnectionID);
if (!$bResult)
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$this->Error("Unlock() failed.");
return 0;
}
return $bResult;
}
else
{
$this->Error("Unlock() called, while there's no connection.");
return 0;
}
}
/**
* @return void
* @desc Toggle MySQL-Error debugging.
*/
function Debug($bDebug)
{
$this->bDebug = $bDebug;
}
/**
* @return void
* @param $sMsg String
* @param $Line Line parameter
* @param $File File parameter
* @desc Error handler.
*/
function Error($sMsg, $Line = '', $File = '')
{
if ($this->iConnectionID <> 0)
{
$this->Unlock(); // In case there are tables locked.
}
print "[Database error]<br><br>";
if ($File) { print "File: " . $File . "<br>"; }
if ($Line) { print "Line: " . $Line . "<br><br>"; }
print $sMsg . "<br><br>";
if ($this->iErrorNr != "0" && $this->sError != "()" && $this->bDebug == True)
{
print "<hr><br>";
printf ("<b>MySQL Error</b>: %s (%s)<br>\n",$this->iErrorNr,$this->sError);
}
}
}
?>
/*
* @desc MySQL Database Engine.
* @version 1.0 [30-03-2004]
*/
class Database
{
var $sHost; //Hostname
var $sDatabase; //Databasename
var $sUser; //Username
var $sPassword; //Password
var $aRecord = Array(); //Current record
var $iRow; //Current row
var $bAutoFree = True; //Autofree query
var $bDebug = False; //Toggle debugging
var $bShowErrors = True; //Toggle showing errors
var $iErrorNr; //Last MySQL Errornr
var $sError; //Last MySQL Error
var $iConnectionID; //Current connectionid
var $iQueryID; //Current queryid
/**
* @return void
* @param $sHost String
* @param $sDatabase String
* @param $sUser String
* @param $sPassword String
* @param $bDebug Boolean
* @desc Database class constructor.
*/
function Database($sHost = '', $sDatabase = '', $sUser = '', $sPassword = '',$bDebug = False, $bShowErrors = True)
{
$this->bDebug = $bDebug;
$this->bShowErrors = $bShowErrors;
$this->Connect($sHost, $sDatabase, $sUser, $sPassword);
}
/**
* @return Integer [ConnectionID]
* @param $sHost String
* @param $sDatabase String
* @param $sUser String
* @param $sPassword String
* @desc Establish a connection and select a database
*/
function Connect($sHost = '', $sDatabase = '', $sUser = '', $sPassword = '')
{
$this->sHost = $sHost;
$this->sDatabase = $sDatabase;
$this->sUser = $sUser;
$this->sPassword = $sPassword;
// Establish connection and select database.
if (! $this->iConnectionID)
{
$this->iConnectionID = @mysql_connect($this->sHost, $this->sUser, $this->sPassword);
if (!$this->iConnectionID)
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$this->Error("No connection with host: " . $this->sHost);
return 0;
}
if (!@mysql_select_db($this->sDatabase,$this->iConnectionID))
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$this->Error("No connection with database: " . $this->sDatabase);
$this->Disconnect();
return 0;
}
}
return $this->iConnectionID;
}
/**
* @return Integer
* @desc Disconnect from server.
*/
function Disconnect()
{
if($this->iConnectionID <> 0)
{
@mysql_close($this->iConnectionID);
$this->iConnectionID = 0;
return 1;
}
else
{
return 0;
}
}
/**
* @return Integer [QueryID]
* @param $sQuery String
* @param $Line Line parameter
* @param $File File parameter
* @desc Execute a query.
*/
function Query($sQuery, $Line = '', $File = '')
{
if(!$this->iConnectionID)
{
$this->Error("No connection with MySQL database.");
return False;
}
// Accept no empty query.
if ($sQuery == '')
{
return 0;
}
// New query, discard previous result.
if ($this->iQueryID)
{
$this->free();
}
if ($this->bDebug == True)
{
print "Debug: Query = " . $sQuery . "<br>";
}
$this->iQueryID = @mysql_query($sQuery,$this->iConnectionID);
$this->iRow = 0;
if (! $this->iQueryID)
{
if($this->bShowErrors)
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$this->Error("Invalid SQL: " . $sQuery, $Line, $File);
}
}
// Will return nothing if it fails.
return $this->iQueryID;
}
/**
* @return Integer [QueryID]
* @param $sQuery String
* @param $iStartRow Integer
* @param $Line Line parameter
* @param $File File parameter
* @param $iNumRows Integer
* @desc Execute a query with limited result.
*/
function LimitQuery($sQuery, $iStartRow = 0, $iNumRows = 10, $Line = '', $File = '')
{
$iStartRow = intval($iStartRow);
$iNumRows = intval($iNumRows);
if ($iStartRow == 0)
{
$sQuery .= ' LIMIT ' . $iNumRows;
}
else
{
$sQuery .= ' LIMIT ' . $iStartRow . ',' . $iNumRows;
}
return $this->Query($sQuery, $Line, $File);
}
/**
* @return void
* @desc Free the query-result.
*/
function Free()
{
@mysql_free_result($this->iQueryID);
$this->iQueryID = 0;
}
/**
* @return Boolean [Another row found?]
* @desc Move to the next row in the recordset.
*/
function NextRecord()
{
if (!$this->iQueryID)
{
$this->Error("NextRecord called with no query pending.");
return 0;
}
$this->aRecord = @mysql_fetch_array($this->iQueryID);
$this->iRow += 1;
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$bStat = is_array($this->aRecord);
if (!$bStat && $this->bAutoFree)
{
$this->Free();
}
return $bStat;
}
/**
* @return Boolean
* @param $iPosition Integer
* @desc Move to given position in recordset.
*/
function SetPosition($iPosition = 0)
{
if (!$this->iQueryID)
{
$this->Error("SetPosition($iPosition) called with no query pending.");
return 0;
}
if (@mysql_data_seek($this->iQueryID, $iPosition))
{
$this->iRow = $iPosition;
}
else
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
@mysql_data_seek($this->iQueryID, 0);
$this->Row = 0;
$this->Error("SetPosition($iPosition) failed: recordset has only " . $this->NumRows() . " rows");
return 0;
}
return 1;
}
/**
* @return String Fieldvalue
* @param $sFieldName String
* @desc Retrieve the value of a field
*/
function Data($sFieldName)
{
if ($this->iQueryID)
{
return $this->aRecord[$sFieldName];
}
return 0;
}
/**
* @return String [dd-mm-yyyy]
* @param $sDate [yyyy-mm-dd] String
* @desc Converts MySQL date to dd-mm-yyyy date and vice versa.
*/
function ConvertDate($sDate)
{
$aNormal = explode("-",$sDate);
$bStat = is_array($aNormal);
if ($bStat)
{
return $aNormal[2] . "-" . $aNormal[1] . "-" . $aNormal[0];
}
return 0;
}
/**
* @return Integer [Number of rows]
* @desc Number of rows in current recordset.
*/
function NumRows()
{
if ($this->iQueryID)
{
return @mysql_num_rows($this->iQueryID);
}
return 0;
}
/**
* @return Integer
* @desc Retrieve last inserted ID, only use after insert-query.
*/
function LastInsertedID()
{
if ($this->iQueryID)
{
return @mysql_insert_id($this->iConnectionID);
}
return 0;
}
/**
* @return Boolean
* @param $sTable String
* @param $sMode String
* @desc Lock a table.
*/
function Lock($sTable, $sMode = 'Write')
{
if ($this->iConnectionID <> 0)
{
$sQuery = "LOCK TABLE " . "$sTable $sMode";
$bResult = @mysql_query($sQuery, $this->iConnectionID);
if (!$bResult)
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$this->Error("Lock($sTable, $sMode) failed.");
return 0;
}
return $bResult;
}
else
{
$this->Error("Lock($sTable, $sMode) called, while there's no connection.");
return 0;
}
}
/**
* @return Boolean
* @desc Unlock all tables.
*/
function Unlock()
{
if ($this->iConnectionID <> 0)
{
$bResult = @mysql_query("UNLOCK TABLES", $this->iConnectionID);
if (!$bResult)
{
$this->iErrorNr = @mysql_errno($this->iConnectionID);
$this->sError = @mysql_error($this->iConnectionID);
$this->Error("Unlock() failed.");
return 0;
}
return $bResult;
}
else
{
$this->Error("Unlock() called, while there's no connection.");
return 0;
}
}
/**
* @return void
* @desc Toggle MySQL-Error debugging.
*/
function Debug($bDebug)
{
$this->bDebug = $bDebug;
}
/**
* @return void
* @param $sMsg String
* @param $Line Line parameter
* @param $File File parameter
* @desc Error handler.
*/
function Error($sMsg, $Line = '', $File = '')
{
if ($this->iConnectionID <> 0)
{
$this->Unlock(); // In case there are tables locked.
}
print "[Database error]<br><br>";
if ($File) { print "File: " . $File . "<br>"; }
if ($Line) { print "Line: " . $Line . "<br><br>"; }
print $sMsg . "<br><br>";
if ($this->iErrorNr != "0" && $this->sError != "()" && $this->bDebug == True)
{
print "<hr><br>";
printf ("<b>MySQL Error</b>: %s (%s)<br>\n",$this->iErrorNr,$this->sError);
}
}
}
?>
Je had - op zich - niet heel je script hier neer hoeven te zetten! Om het overzicht te bewaren verzoek ik je dan ook dit weer te verwijderen, en gewoon je vraag te stellen.
Om die alvast te beantwoorden: je gebruikt in PHP5 geen var meer, maar public, private of protected variabelen.
wordt bijvoorbeeld
Lees verder op PHP.net
Om die alvast te beantwoorden: je gebruikt in PHP5 geen var meer, maar public, private of protected variabelen.
wordt bijvoorbeeld
Lees verder op PHP.net
Mja, misschien is je script nog helemaal ingesteld op PHP4 en draait je server PHP5. Je zal waarschijnlijk vrij veel in je script moeten aanpassen om het te laten werken.
Een andere (waarschijnlijkere) oorzaak waarom je een lege pagina krijgt is dat je wel een complete klasse hebt, maar er nog geen object van hebt gemaakt. Bovenaan je script staat zoiets als:
Dat is alleen de klasse. Je kan een object maken door een nieuwe variabele aan te maken met de klassenaam. Vervolgens kan je members (functies binnen de klasse) aanroepen, op deze wijze:
Het bovenstaande voorbeeld zal uiteraard weinig doen, maar zo wordt het wellicht wat duidelijker. Let er trouwens op dat je alleen public variabelen en members kan aanspreken; private is alleen voor gebruik binnen de klasse zelf. Je hebt ook nog protected, maar die heb je waarschijnlijk helemaal niet nodig (die is om andere afhankelijke klassen toegang te geven tot variabelen en members)
Een andere (waarschijnlijkere) oorzaak waarom je een lege pagina krijgt is dat je wel een complete klasse hebt, maar er nog geen object van hebt gemaakt. Bovenaan je script staat zoiets als:
Code (php)
Dat is alleen de klasse. Je kan een object maken door een nieuwe variabele aan te maken met de klassenaam. Vervolgens kan je members (functies binnen de klasse) aanroepen, op deze wijze:
Het bovenstaande voorbeeld zal uiteraard weinig doen, maar zo wordt het wellicht wat duidelijker. Let er trouwens op dat je alleen public variabelen en members kan aanspreken; private is alleen voor gebruik binnen de klasse zelf. Je hebt ook nog protected, maar die heb je waarschijnlijk helemaal niet nodig (die is om andere afhankelijke klassen toegang te geven tot variabelen en members)
Om te reageren heb je een account nodig en je moet ingelogd zijn.
Inhoudsopgave
Labels
- Geen tags toegevoegd.
PHP hulp
0 seconden vanaf nu