|
Huidige score: |
|
50 |
|
|
Een database class als extensie van PDO voor mysql. Uiteraard plaats ik deze op de site in het public domain, maar ik leg de code graag eerst even aan de overige experts onder jullie voor.
Dank aan Psycho, die me op het spoor van PDO bracht. Zie zijn opmerkingen; deze hebben (uiteraard) GEEN betrekking op de huidige code, maar op de vorige, die door deze code inmiddels is vervangen.
Het stelt niet zoveel voor, het is een kleine uitbreiding met functies, die het coderen van database handelingen in andere scripts gewoon wat makkelijker maken. Een soort wrapper ofzo.
Er zit geen custom exeption handler in; fouten worden wel ge-echoed, maar dit is slechts voor testdoeleinden.
Wie er even naar wil kijken is welkom natuurlijk. Graag commentaar en verbeteringen.
PHP-code
Alvast bedankt.
Roland |
|
Gepost op:
14 juni 2008 - 21:59 |
|
|
|
PHP expert
|
Mag ik vragen wat er mis is met de huidige mysql functies ?
Als dit nou een class was zoals PDO... Ik vind dit niet echt handig. |
|
|
|
Gepost op:
15 juni 2008 - 15:11 |
|
|
|
Nieuw lid
|
Niks mis met de mysql functie, maar ik vind dat je met deze class een schonere code hebt, die ook goed is te onderhouden. Dat is toch de bedoeling van OOP. Voorbeeld:
<?php
if (!$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')) {
echo 'Could not connect to mysql';
exit;
}
if (!mysql_select_db('mysql_dbname', $link)) {
echo 'Could not select database';
exit;
}
$sql = 'SELECT foo FROM bar WHERE id = 42';
$result = mysql_query($sql, $link);
if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
while ($row = mysql_fetch_assoc($result)) {
echo $row['foo'];
}
mysql_free_result($result);
?>
<?php if (!$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')) { echo 'Could not connect to mysql'; } echo 'Could not select database'; } $sql = 'SELECT foo FROM bar WHERE id = 42'; if (!$result) { echo "DB Error, could not query the database\n"; } } ?>
wordt:
<?php
include '../mijncms/inc.class.db.php';
$oDb = new dbSet();
if ($oDb->dbSelect('bar', 'foo','id = 42')) {
while($row = $oDb->dbRecord()) {
echo $row['foo'];
}
}
?>
<?php include '../mijncms/inc.class.db.php'; $oDb = new dbSet(); if ($oDb->dbSelect('bar', 'foo','id = 42')) { while($row = $oDb->dbRecord()) { } } ?>
12 regels minder code. Of iemand dat handig vindt moet hij voor zichzelf uitmaken. Ik post het, en als je het kunt gebruiken, be my guest.
Overigens was mijn vraag of iemand er verbeteringen in ziet. Niet of het al of niet handig is; da's namelijk een heel andere discussie.
Roland |
|
|
|
Gepost op:
16 juni 2008 - 19:24 |
|
|
|
PHP expert
|
Je moet een onderscheiding maken tussen connectie en tabel.
$con = new DB(..);
$table = $con->getTable('tabel');
$table->fetchAll();
$con = new DB(..); $table = $con->getTable('tabel'); $table->fetchAll();
fetchAll() geeft dan een recordset terug en moet ik geen while lus gebruiken of dergelijk. Sommige stukken zitten niet goed in elkaar, maw het is een zooi'tje. |
|
|
|
Gepost op:
17 juni 2008 - 00:48 |
|
|
|
PHP expert
|
In mijn reactie heb ik aangegeven wat de verbetering kan zijn: meer in de richting van PDO |
|
|
|
Gepost op:
19 juni 2008 - 18:26 |
|
|
|
Nieuw lid
|
@Psycho: Ok, dank je PDO ken ik niet, ben nog niet zo gek lang bezig in PHP. Bovendien al wat ouder (56 jaar) en dan gaat het leren wat langzamer ;)
@Stijn: Moet ik in een recordset niet altijd met een while lus doorheen om de afzonderlijke records te processen (met fetch_array/fetch_object)?
Als ik je voorbeeld goed begrijp:
- new DB geeft een connectie naar de database terug
- wat voor object returnt getTable?
- fetchAll geeft een recordset uit een SELECT statement?
edit:
Forget it, sorry. Ben er nu een beetje achter |
|
|
|
Gepost op:
03 juli 2008 - 14:29 |
|
|
|
Nieuw lid
|
Ok, met dank aan Psycho heb ik hier de nieuwe class gepost. |
|
|
|
Gepost op:
03 juli 2008 - 19:19 |
|
|
|
PHP expert
|
1) Maak je eigen error class en gooi die als bij een fout. Jij moet de afhandeling niet doen.
2) Deze class is gemaakt met een code voorbeeld. Je zegt dat die class zo moet werken (zie <code> in je commentaar) maar da's niet OOP. Je bouwt een class naargelang zijn eigenschappen en zijn functie. |
|
|
|
Gepost op:
07 juli 2008 - 12:26 |
|
|
|
Nieuw lid
|
Citaat: 1) Maak je eigen error class en gooi die als bij een fout. Jij moet de afhandeling niet doen.
Ja ok, ga ik maken.
Citaat: 2) Deze class is gemaakt met een code voorbeeld. Je zegt dat die class zo moet werken (zie <code> in je commentaar) maar da's niet OOP. Je bouwt een class naargelang zijn eigenschappen en zijn functie.
Ok dank je. Moet nog veel leren van OOP |
|
|
Posten van een reactie is niet mogelijk. |
Bekijk: |
|
|
|