[OOP|SQLite] global vanuit extended class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior Front end developer

Functie Als Front end developer binnen onze organisatie ga jij je bezig houden met het bouwen van de user experience van de webapplicaties. Je bent verantwoordelijk voor het vertalen van concepten, briefings en designs naar werkende functionaliteit. Hierbij zorg je ervoor dat applicaties betrouwbaar, veilig en toekomstbestendig zijn en een goede architectuur hebben en behouden. Verder denk je actief na- en mee over nieuwe ontwikkelingen en functionaliteiten om zo elke dag de klantervaring weer te verbeteren. Dit doe je natuurlijk niet alleen maar in een development team. Het team bedraagt momenteel 4 man bestaande uit 2 devops engineers en 2

Bekijk vacature »

.NET developer

Functie Jij begint als .NET ontwikkelaar in een team met 10 andere Software Engineers. De werkzaamheden zijn afwisselend, zo kan het dat jij bezig bent met volledig nieuwe features of het door ontwikkelen van bestaande sites of shops. Wij ontwikkelen web applicaties, maar ook mobiele applicaties. Daarnaast bijt jij je soms ook van in externe koppelingen met systemen zoals een ERP. Als team is er een duidelijke focus m.b.t. het waarborgen van de performance en snelheid van webshops. Ook zijn wij expert op het gebied van configuratoren. Kortom enorm veel afwisselende werkzaamheden! Ook jouw werkplek kan afwisselend zijn. Soms heb

Bekijk vacature »

Developer Full Stack

Functie omschrijving Developer gezocht! Ben jij een enthousiaste developer die graag wil bijdragen aan ontwikkelingen binnen een mooie organisatie? Solliciteer dan snel. Wij zijn op zoek naar een Full Stack Developer uit de regio Nijkerk die gaat bijdragen aan het door ontwikkelen, onderhouden en optimaliseren van een SaaS applicatie. Je moet beschikken over beheersing van zowel de Nederlandse als Engelse taal aangezien je samen met de klant gaat werken. Bedrijfsprofiel Je komt te werken binnen een echt familiebedrijf dat al sinds 1925 actief is binnen de FMCG branche. Het bedrijf heeft 40 medewerkers en er heerst een platte communicatiestructuur waarbij

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

Freelance JAVA / C# Developer

Functieomschrijving 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! Voor een opdrachtgever in omgeving Delft zijn wij op zoek naar ervaren JAVA of C# Developers die graag op projectbasis willen werken. Je komt terecht bij een informele developers club die mooie projecten uitvoeren voor grote klanten. 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

Bekijk vacature »

.NET Developer C#

Dit ga je doen Als developer nieuwe gave features implementeren; Werken met technieken als C# .NET en (REST) API's webservices; Ontwikkelen van koppelingen middels API's; Maken van technische keuzes en beslissingen over de architectuur; Junior collega's coachen; Initiatief nemen voor nieuwe technische mogelijkheden; Je bent een belangrijke schakel - en vindt het leuk - om te schakelen met de business. Hier ga je werken Als C# .NET Developer wordt je verantwoordelijk voor het ontwikkelen van applicaties voor belangrijkste product van deze organisatie. Dit product is een applicatie voor alles omtrent hypotheken. De programmeertaal die je hierbij beheerst is C#. Er

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Voor een mooi softwarebedrijf in omgeving Moordrecht zijn wij op zoek naar een Embedded Software developer. Ben jij enthousiast en een echte team player? Lees dan snel of dit iets voor jou is! Binnen deze rol houdt jij je bezig met alle werkzaamheden die nodig zijn om een functionaliteit te bouwen. Denk aan ontwerpen, architectuur, programmeren en algoritmes. Je voert test en validatie werkzaamheden uit bij de implementatie bij de klant. Ben jij een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Laat dan snel wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot

Bekijk vacature »

Creatieve Front-end developer gezocht!

Functie Het front-end team bestaat momenteel uit 4 collega’s en is hard aan het groeien! Samen leveren jullie een essentiële bijdrage aan de applicaties die ze voor hun klanten realiseren. Je werkt in het front-end team samen met de back-end teams en product owners om te zorgen dat de applicaties een fijne gebruikerservaring opleveren. Jouw expertise zorgt ervoor dat de juiste keuzes gemaakt worden qua techniek en ontwerp, van back-end tot aan gebruiker. In samenspraak met je team bepalen jullie de beste keuze voor techniek. Ook is er altijd ruimte om nieuwe technieken te ontdekken. Eisen • Je hebt gedegen

Bekijk vacature »

C++ Developer

Functieomschrijving Ben jij als software engineer toe aan een nieuwe uitdaging? Dan zijn wij op zoek naar jou! Voor het maken van de procesbesturingsoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Ontwerpen, programmeren en testen van productaanpassingen; Implementeren van nieuwe productreleases in de projectteams; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden,

Bekijk vacature »

.NET Developer Azure

Dit ga je doen Het ontwerpen en bouwen van diverse applicaties (C#, ASP.NET, MVC); Het ontwikkelen van Webservices (WCF); Het meewerken aan de transitie naar Azure; Het samenwerken met collega's binnen een Scrumteam en meedenken over de User Stories; Het bouwen van unittesten; Meedenken over nieuwe tooling, ontwikkelingen en technologieën in de markt. Hier ga je werken Je komt te werken bij een organisatie die verantwoordelijk is voor de ontwikkeling van verschillende portalen. Deze portalen worden gebruikt door diverse partijen en jouw taak is om ervoor te zorgen dat deze optimaal functioneren. Je wordt onderdeel van een Scrumteam en werkt

Bekijk vacature »

Ervaren C#.NET developer

Functieomschrijving We zijn op zoek naar een ervaren C#.NET programmeur voor een moderne werkgever in de regio Prinsenbeek. Als programmeur zal je bezig zijn met het ontwikkelen van op maat gemaakte webapplicaties voor verschillende klanten, waarbij je ervoor zorgt dat complexe processen zo goed mogelijk worden ondersteund. Je takenpakket omvat onder andere: Werken met databases en dataopslagoplossingen, implementeren van beveiligingsoplossingen en het waarborgen van de beveiliging van applicaties en gegevens, evenals het schrijven van technische documentatie en gebruikershandleidingen. Het ontwikkelen en onderhouden van C#.NET-applicaties. Bijdragen aan het ontwerp en de architectuur van softwaretoepassingen. Het schrijven van hoogwaardige en herbruikbare codes.

Bekijk vacature »

Full Stack Developer

Dit ga je doen Ontwikkelen van Product Informatie Management (PIM) systemen; Werken aan zowel grotere als kleine projecten voor toonaangevende klanten binnen o.a. de retail; Verantwoordelijk voor de front-end werkzaamheden; Naast de front-end werk je ook aan de backend. Hier ga je werken Als Full Stack Developer komt je te werken binnen een vooruitstrevende organisatie die Product Informatie Management (PIM) systemen levert aan hun klanten. Hun klanten zijn toonaangevende bedrijven binnen o.a. de retail. De organisatie zit gevestigd in regio Zwolle en bestaat uit zo'n 35 medewerkers, waarvan 30 IT. Je komt te werken binnen één van de zelfsturende development

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

SAP HANA Cloud Application Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 12662 Introductie HANA Cloud Application Developer at a High Tech company. The company is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. This role is situated in the Big Data Analytics (BDA) Domain. The teams have mixture of young talent and senior specialists and have a

Bekijk vacature »

Lasrobot Programmeur

Over de functie Off-line programma’s maken die het beste resultaat bij de lasrobot mogelijk maken De programma’s met behulp van teach verder optimaliseren Proactief meedenken over oplossingen en over de juiste invulling van lasmallen Het lasrobotproces zoveel mogelijk optimaliseren Over het bedrijf Onze opdrachtgever is gespecialiseerd in de engineering, productie en assemblage van samengestelde plaatwerkproducten en monodelen uit metaal. Onze klant werkt samen met het team aan de mooiste producten van de toekomst. Binnen dit bedrijf staat een sterk team van specialisten op het gebied van industrial design, mechanical engineering, in-house prototyping en all-round projectmanagement. Met daarbij uiteenlopende kennis in

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

05/05/2024 14:06:21
 
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.