[OOP|SQLite] global vanuit extended class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Medior PHP Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte website die in eigen beheer zijn. In onze vestiging in Nederweert zitten onze development afdelingen en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé PHP/Back-end developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het bedenken van nieuwe functionaliteiten Het verbeteren van het

Bekijk vacature »

Senior front-end developer (React)

Functie Momenteel zijn ze op zoek naar een ervaren front-end developer. Als senior werk je nauw samen met 5 collega developers. Een klein scrum team dus, met korte lijnen waardoor jouw ideeën snel tot uitvoering gebracht kunnen worden. De huidige applicaties worden veelal ontwikkeld met o.a. React, Redux, TypeScript. Ze zijn echt op zoek naar een kartrekker in het team. Naast het meedenken over, opzetten en uitvoeren van bijvoorbeeld de architectuur of toepassing van nieuwe technieken krijg je ook veel tijd om de meer junior (front-end) developers te begeleiden. Hierin nemen ze graag de tijd om mensen de ruimte te

Bekijk vacature »

Freelance Fullstack Java Developer

Functieomschrijving Voor een opdrachtgever in omgeving Rotterdam zijn wij op zoek naar ervaren Fullstack JAVA Developers die graag op projectbasis willen werken. Je komt terecht bij een informele developers club die mooie projecten uitvoeren voor grote klanten. Ben je een ervaren freelancer of werk je in loondienst en ben je toe aan een nieuwe uitdaging? Lees dan snel verder want wie weet is dit een leuke vacature voor jou! Het fijne van deze werkgever is dat je zelf mag beslissen hoe je te werk wilt gaan. Wil je als freelancer werken dan is dat OK. Wil je de zekerheid hebben

Bekijk vacature »

Junior .NET developer

Functie Wij zijn bezig met het ontwikkelen van een nieuw product en wij hebben jouw hulp hierbij nodig! Als junior .NET ontwikkelaar krijg jij de kans om samen met ons deze nieuwe uitdaging aan te gaan! Momenteel bestaat ons team uit drie interim Software Engineers. Twee hiervan zijn zeer ervaren .NET specialisten die inmiddels hun strepen in dit vakgebied al hebben behaald. Ook hebben wij een junior als onderdeel van ons team die zich op dit moment nog bezig houdt met de Front-end (Angular/TypeScript), maar zich nu ook meer gaat verdiepen in de backend. Wij willen ons team graag verder

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Backend Developer Scrummaster .NET

Samengevat: Deze werkgever is een ambitieus internetbedrijf met een passie voor digitale communicatie. Ben jij geschikt als Backend Developer? Heb je ervaring met .NET platform? Vaste baan: Backend Developer / SCRUM Master Scrum HBO WO €3.800 - €6.000 Deze werkgever is een innovatief bedrijf met enthousiaste mensen die jarenlang ervaring hebben met het ontwikkelen internet- en intranetoplossingen. Wij houden van korte lijnen en open en eerlijke communicatie. Wij zetten graag onze jarenlange ervaring in om perfect werkende oplossingen te ontwikkelen. Wij ondersteunen dienstverlenende organisaties bij het ontwikkelen en realiseren van een effectief, adaptief communicatieplatform. Je ontwikkelt met ons de meest

Bekijk vacature »

Lead Java Developer

Dit ga je doen Je taken bestaan onder andere uit: Het aansturen van een development team bestaande uit 8 collega's op technisch maar ook HR gebied; Het maken van strategische keuzes omtrent de (nieuw)bouw van deze applicatie; Het maken van technische ontwerpen; Hands-on mee ontwikkelen met het team (met o.a. Java, Spring, Angular, REST); Reviewen van code en feedback geven op collega developers. Hier ga je werken Als Lead Software Developer ben je verantwoordelijk voor één van de vier Agile Java ontwikkelteams die bouwen aan technologie die duizenden instanties wereldwijd verbindt. Dit Agile team, data Jira en Confluence gebruikt en

Bekijk vacature »

VB.NET developer

Functie Het development team waar jij in terecht komt bestaat uit twee ervaren software developers. De directeur/eigenaar is tevens één van deze developers. Jij werkt direct samen met jouw werkgever en kan dan ook veel kennis en ervaring bij dit bedrijf op doen. Als team zijn jullie verantwoordelijk voor de kantoorapplicatie die deze organisatie aanbied in een niche markt. Het team is op dit moment actief bezig met een migratie waarbij het eindstation eindigt in een C# .NET omgeving. Echter is een deel van de software al geschreven in C# .NET. Hierbij is gebruik gemaakt van C# .NET, CSS, HTML,

Bekijk vacature »

Back end developer Digital Agency

Functie Wij zijn van origine een wordpress bureau, maar sinds 2006 zijn wij dit wel redelijk ontgroeid. Naar mate de jaren verstreken zijn we gegroeid in omvang, maar ook in de complexiteit van opdrachten waarin wij onze klanten kunnen bedienen. Momenteel bestaat onze organisatie uit 4 front end developers, 12 back end developer 3 projectmanagers en een 2 koppig management. Wij zijn een hele informele, bijna familiaire organisatie. Geen strak pak of overhemd, nee gewoon dragen waar jij je prettig bij voelt. De gemiddelde leeftijd ligt tussen de 25 en 30 en wij doen er veel aan om onze hechte

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Microsoft Acess Developer

Functieomschrijving Wat ga je doen? Heb jij ongeveer 3 jaar ervaring als Software Developer, en komen de volgende kennisgebieden jou niet vreemd voor: MS Acces, C# & SQL? Vind jij het daarnaast leuk om maatwerk software te ontwikkelen voor klanten in een bijzondere branche? Lees dan snel verder! Als developer ben jij samen met een gemotiveerd team van 10 collega’s verantwoordelijk voor het creëren van aangemeten software voor klanten. Je bent klantvriendelijk en oplossingsgericht ingesteld, omdat het essentieel is om de klanten zo goed mogelijk te helpen met hun uitdagingen. Het is mogelijk om vanuit huis je werkzaamheden uit te

Bekijk vacature »

Software Programmeur PHP

Functie Ben jij op zoek naar een nieuwe uitdaging als PHP developer en zoek je een leuke platte organisatie? Lees dan snel verder! Voor een opdrachtgever in omgeving Capelle aan den IJssel dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen PHP, JAVA en Node.js. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn

Bekijk vacature »

C# developer

Functie Als C# ontwikkelaar ben jij de spin in het web bij deze organisatie. Jij begeleidt en traint de field engineers die bij de klanten machines leveren en installeren. Daarnaast ondersteun jij de field engineers als zij bij de klant vastlopen bij het installeren van de machine m.b.t. software matige vragen. Jouw doel is dan ook om de technische kennis van de field engineers door middel van training zoveel mogelijk uit te breiden. Dit om ervoor te zorgen dat zij zelfstandiger software matige problemen kunnen oplossen. Ook ben jij verantwoordelijk voor het bedenken van software oplossingen voor klanten en dit

Bekijk vacature »

Social Media Specialist

Social Media Specialist locatie: Rotterdam (Zuid Holland) Wij zoeken op korte termijn een nieuwe collega, een social media specialist/ adviseur sociale media (24 uur), voor ons sprankelende team Communicatie van CJG Rijnmond. Onze focus ligt op het informeren en binden van onze in- en externe klanten en stakeholders en het versterken van onze naamsbekendheid en zichtbaarheid. Dat doen we in nauwe samenwerking met elkaar. Over de functie Ons team bestaat uit 7 communicatieprofessionals met ieder een eigen expertise. Als lid van het online team ben je verantwoordelijk voor het ontwikkelen, uitvoeren en analyseren van onze socialemediastrategie. Ook stel je campagnes

Bekijk vacature »
Majid Ahddin

Majid Ahddin

05/10/2006 14:51:00
Quote Anchor link
Hoi.
Misschien zegt de titel genoeg. Ik heb een heel achterhaald DB systeem gebouwd dat zowel SQLite als MySQLi aankan met zelfde syntax/queries. Het probleem is echter dat SQLite geen fatsoenlijke error handling heeft, dus die moet ik afvangen met een tijdelijke error_handler. Die errorhandler wordt dus niet aangeroepen vanuit trigger_error() omdat het alleen om sqlite errors gaat, die gespawnd worden 'tijdens' het uitvoeren van de query.

Het doel is geen errors te printen (dat kan, namelijk afvangen en discarden) en in de code zelf netjes een msg weer te geven. In die msg kan ik de query zetten (die wordt nl. ook in de code aangemaakt, dus die heb ik) en dat er een fout is opgetreden. Maar WAT de fout is, is niet te achterhalen... De error handler vangt de fout af en discard m dan, dus die gaat verloren. Ik heb geprobeerd -- op elke mogelijke manier -- om te fout op te slaan in de DB klasse om m zo netjes te kunnen printen, in de code, via een public var, maar ik kan via de error handler niet (meer) bij de geinstantieerde (snappie?) klasse, dus kan m nergens opslaan.

Toen dacht ik, net als php heeft/had, de error op te slaan in een global/public var -- bijvorbeeld $szLastSQLiteError -- en die in de code aan te roepen in geval van error. Het probleem: de var wordt niet gevuld. Heb een aantal manieren geprobeerd, maar kom er niet uit!

Ik zal mijn code printen, maar let op, het is achterhaald, slecht en slordig :)
Alle defininitions bestaan en zijn as expected.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

/** PERFORM QUERY **/
function sqlquery( $sqlQuery, $dbCon = NULL, $bLastTry = FALSE )
{

    if ( TRUE === $bLastTry && !is_object($dbCon) )
    {

        trigger_error("<span style=\"color:#bb0000;font-weight:bold;\">DB CONNECTION NEEDED TO PERFORM QUERIES!</span>", E_USER_ERROR);
    }


    /** SQLITE **/
    if ( "sqlite" == SQL_HANDLER )
    {

        if ( !$dbCon ){$dbCon = sqlconnect( DB_SQLITE_DBNAME ); sqlquery($sqlQuery,$dbCon,TRUE);}
        $qR = $dbCon->query($sqlQuery);
// var_dump( $qR );
        if ( !$qR )
        {

            return FALSE;
        }

        else if ( FALSE !== $qR && TRUE !== $qR )
        {

            return $qR->fetchAll( SQLITE_ASSOC );
        }

        else
        {
            return $qR;
        }


        return FALSE;
    }

    /* */


    /** MYSQLI **/

    if ( "mysql" == SQL_HANDLER )
    {

        if ( !$dbCon ){$dbCon = sqlconnect( DB_SQLITE_DBNAME ); sqlquery($sqlQuery,$dbCon,TRUE);}
        $qR = $dbCon->query($sqlQuery);
        // var_dump( $qR );
        if ( !$qR )
        {

            return FALSE;
        }

        else if ( FALSE !== $qR && TRUE !== $qR )
        {

            $arrResults = Array( );
            while ( $arr = $qR->fetch_assoc() )
            {

                $arrResults[] = $arr;
            }

            // print_r( $arrResults );
            return $arrResults;
        }

        else
        {
            return $qR;
        }


        return FALSE;
    }

    /* */

} // END sqlquery( )



/** CONNECT TO DATABASE **/

function sqlconnect( $dbname = SQL_LOGIN_DATABASE_MEM, $host = SQL_LOGIN_HOST, $user = SQL_LOGIN_USER, $pass = SQL_LOGIN_PASS, $sock = SQL_LOGIN_SOCKET, $port = SQL_LOGIN_PORT )
{

    global $LastSQLiteError;
    $LastSQLiteError = "";

    /** SQLITE **/
    if ( "sqlite" == SQL_HANDLER )
    {

        try {
            $dbCon = new CVM_SQLiteDatabase( $dbname );
        }
catch ( Exception $exc ) {
            die("Exception caught: &quot;".$exc->getMessage()."&quot; :: ".print_r( $exc->getTrace(), TRUE )." <--\n");
        }

        if ( !$dbCon )
        {

            return FALSE;
        }

        return $dbCon;
    }

    /* */


    /** MYSQLI **/

    if ( "mysql" == SQL_HANDLER )
    {

        $dbCon = new CVM_mysqli( $host, $user, $pass, $dbname, $port, $sock );
        if ( !$dbCon )
        {

            return FALSE;
        }

        return $dbCon;
    }

    /* */

} // END sqlconnect( )



/** MYSQLI CLASS | EXTENDED FOR sqlquery( ) **/

class CVM_mysqli extends mysqli
{
    final public function query( $sql )
    {

        $result = parent::query( $sql );
        if ( !$result )
        {

            die( "<div style=\"position:absolute;top:0;left:0;margin:0;padding:7px;border:solid 4px red;\">\n<b>SQL ERROR!!</b><br/>\n" .
            "<div style=\"background-color:#ccc;\"><font style=\"font-family:'courier new';font-size:10pt;\">&quot;".$sql."&quot;</div>\n" .
            "^^ " . $this->error . "</font></div>\n" );
        }

        return $result;

    }
// END query( )

    public function sqlquery( $sql )
    {

        $q = sqlquery( $sql, $this );
        // print_r( $q );
        return $q;

    }
// END sqlquery( )


} // END Class CVM_mysqli


if ( "sqlite" == SQL_HANDLER )
{

    /** SQLITE CLASS | EXTENDED FOR 'ERROR REPORTING' **/
    class CVM_SQLiteDatabase extends SQLiteDatabase
    {

        const    FieldDelimiter    = "";
        public    $szLastError    = "";


        public function query( $sql )
        {

            // Filter errors only in this class!
            set_error_handler("sqlite_errorhandler");

            $result = parent::query( $sql );
            if ( !$result )
            {

                return FALSE;
                die( "<br/>\n<pre>&gt;&gt; $sql &lt;&lt;</pre>\n\n" );
            }


            restore_error_handler( );

            return $result;

        }
// END query( )

        public function sqlquery( $sql )
        {

            return sqlquery( $sql, $this );
        }


        static public function setError( $err )
        {

            // echo $err;
            global $LastSQLiteError;
            $LastSQLiteError = $err;
        }


        public function prepare_fields( $tmp_arrFields )
        {

            $arrFields = Array( );
            foreach ( $tmp_arrFields AS $fldName )
            {

                if ( 0 < strlen(trim($fldName)) )
                {

                    $arrFields[] = $fldName;
                }
            }


            $retval = self::FieldDelimiter . implode(self::FieldDelimiter.", ".self::FieldDelimiter, $arrFields) . self::FieldDelimiter;

            return trim($retval);

        }
// END prepare_fields( )


    } // END CLASS VM_SQLiteDatabase


    /** SQLITE ERROR REPORTING **/

    function sqlite_errorhandler( $errno, $errstr, $errfile, $errline )
    {

        $errstr = trim(str_replace('::','',$errstr));
        $errstr = trim(substr($errstr, strpos($errstr, ':')+1));

        CVM_SQLiteDatabase::setError($errstr);
        return;

        echo '<font color="blue"><b>SQLITE ERROR</b>: '.$errstr.'</font>';

    }
// END sqlite_errorhandler( )
}

?>


Het gehele MySQLi gedeelte is te verwaarlozen, ik gebruik alleen nog SQLite (in MySQLi is dit een eitje).
Een aanroep en usage kan zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$dbCon
= sqlconnect( "/tmp/some_db.db" );

$sql = "SELECT * FROM master WHERE type='table';";
$arrRijen = $dbCon->sqlquery($sql);
if ( FALSE === $arrRijen )
{

    // er is een SQLite Query fout opgetreden :) Yeeh
    echo "\n\nSQLITE ERROR\nQuery: ".$sql."\nError: ".$LastSQLiteError."\n\n";
}


?>


Iemand betere ideeen? Heel de code mag afgekraakt worden :) Graag met onderbouwing aub.

groetjes
Rudie
 
PHP hulp

PHP hulp

26/04/2024 02:52:33
 
Jelmer -

Jelmer -

05/10/2006 15:02:00
Quote Anchor link
Wat nu als je een errorhandler maakt volgens deze standaard voorschriften, maar binnen je klasse definieert. Vervolgens registreer je hem dan met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
set_error_handler(array($this, 'errorHandler'));
?>

Als ik het goed heb wordt dan de method van de huidige instance aangeroepen, en hoef je niet met static-zooi te klooien.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class DB {
   protected $errors = array();

   public function query($sql)
   {

      set_error_handler(array($this, 'errorHandler'));
      
      /* query etc. */
   }

   public function errorHandler($errno, $errstr, $errfile, $errline)
   {

      $this->errors[] = array($errno, $errstr);
   }
}


$instance = new DB(...);
$instance->query('Foute query!');

var_dump($instance);
?>
 
Majid Ahddin

Majid Ahddin

05/10/2006 17:08:00
Quote Anchor link
Dat zou wel een erg goede zijn. Spul meteen in class opslaan (zoals ik bedoelde :)) en vanuit db instance ophalen!
Geweldig!
Ik ga het proberen

dank
groetjes
R
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.