[OOP|SQLite] global vanuit extended class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior Java developer

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 »

Front-End React Developer

Als Front-End React Developer verbeter je de user experience van onze eigen webapplicaties voor onze collega's binnen Coolblue. Wat doe je als Front-End React Developer bij Coolblue? Als Front-end React Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten met React.js. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Front-end React Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Verbeteren van de gebruiksvriendelijkheid van onze webshop

Bekijk vacature »

Softwareontwikkelaar Cleopatra

Functieomschrijving: De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van bromen snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie.De opdracht bestaat uit: het programmeren van de diverse modules;het tijdens demo's tonen van de

Bekijk vacature »

Senior Front end developer Angular

Functie Er zijn momenteel 5 SCRUM-teams waarvan drie gefocust zijn op DevOps en de huidige projecten en twee op innovatie van de platformen. Jij zal onderdeel worden van het innovatie Scrum team. De 2 multidisciplinaire innovatie teams bestaan momenteel uit 14 werknemers. Jij als senior Front end developer wordt onderdeel van onze innovatieteams. De innovatieteams houden zich bezig met het door ontwikkelen van de huidige producten en denken na over nieuwe functionaliteiten. Binnen de rol van Front end developer krijg je veel vrijheid en kan je je dag zelf indelen. Dingen waar jij je dagelijks mee bezig zult houden is

Bekijk vacature »

Front-end Developer

Gezellige team, passie en een groene toekomst! Lees hier de vacature van Front-end Developer bij All in Power! All in power heeft zich tot doel gesteld écht bij te dragen aan de energietransitie. Dit doen wij door de markt voor energie volledig op zijn kop te zetten. Producenten van schone (wind- of zonne-)energie verkopen via ons platform hun energie rechtstreeks aan gebruikers. Of dit nu huishoudens, bedrijven of bijvoorbeeld laadpalen zijn ons platform maakt het uitwisselen van energie mogelijk. Zo maken we de business case van onze klanten veel sterker en loont het om (meer) te investeren in vergroening voor

Bekijk vacature »

Java Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 12946 Introductie We are looking for a Java Developer! Our client is one of the most innovation companies located within the Netherlands. We provide high quality software in a high-tech and challenging market. Functieomschrijving The department is specialized in creating and developing high quality software for manufacturing automation in a high tech environment. We strive to provide our clients with high quality software and deliver state of the art solutions in a variety of ways. Creating software infrastructure using Java SE / EE Create applications to fine tune manufacturing processes

Bekijk vacature »

Medior/senior Python developer

Functie Bedrijven komen bij deze organisatie om technische vraagstukken op te lossen en hierin ook tot oplossingen te komen waar ze zelf misschien niet aan gedacht hadden. Jij gaat vanuit je ervaring dus niet alleen hands-on aan de slag met het ontwikkelen, maar zult ook zeker adviseren en proactief meedenken met de klant. Er zijn meerdere lange en/of korte projecten en het type klanten is heel uiteenlopend. Zo kun je terecht komen in een multidisciplinair scrumteam waarin je als Python developer meewerkt, of juist voor een kleiner (Greenfield) project aan de slag gaan waarin je veel breder bezig bent. Door

Bekijk vacature »

Informeel bureau zoekt Senior PHP developer

Functie Als senior PHP developer neem je het voortouw in ontwikkeltrajecten en ben je in staat werk uit te leggen aan collega’s om zo je kennis met hen te delen. Je deinst niet terug voor ingewikkelde projecten. Deze zie jij alleen maar als uit uitdaging. Je werkt doorlopend aan klantcases (en hierdoor je klant echt leert kennen), maar toch ben je afwisselend bezig. Dit alles in een vrije en ontspannen werksfeer, met een team van gelijkgestemde. Binnen de development teams werken ze met o.a. PHP, Laravel, React, Node, Elastic, Amazon AWS, JIRA, Solid, Domain-driven-design, Doctrine, Redis, docker, Kubernetes, CI, PHP

Bekijk vacature »

Java Developer

Functie Wat ga je doen als Java developer? Jij komt terecht binnen een informeel team waarin je verantwoordelijk bent voor de backend systemen voor grote klanten als Ziggo en KPN. Als Medior Java developer werk je in teamverband en soms individueel. Gedurende de werkweek zal je veelvuldig sparren met je collega’s voor een goede implementatie van de software. Ben jij een echte Java developer? Ben je geïnteresseerd in de nieuwste technieken en de laatste ontwikkelingen? Dan ben je hier aan het juiste adres! Eisen Wat wordt er van jou verwacht? • Minimaal HBO/WO denk- en werkniveau; • Analytisch sterk, open

Bekijk vacature »

Back End Developer

Als Back End developer bij KUBUS houd je je bezig met het ontwikkelen van de (web)applicatie en services van BIMcollab. Je hebt een focus op de back end van onze software, daarvoor werken wij hoofdzakelijk met C# en .NET. Wij hanteren een full-stack benadering, wat betekent dat je naast de back-end ook meehelpt bij andere onderdelen van de code. Als softwarebedrijf bevindt KUBUS zich in een unieke positie. We bouwen aan onze eigen producten die wereldwijd door tienduizenden gebruikers worden gebruikt. Ons bedrijf heeft precies de juiste grootte: groot genoeg om echt impact te maken in de markt, maar klein

Bekijk vacature »

Functioneel applicatiebeheerder - SOP-SYS-SAM

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Functioneel Applicatiebeheerder op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je gaat samenwerken in een team van circa 15 functioneel applicatiebeheerders en gaat onderdeel uitmaken van een DevOps team. Met dit team ga je applicaties (laten) ontwikkelen en beheren. Hierbij concentreer je je vooral op de functionele aspecten, zodat

Bekijk vacature »

Junior .NET developer

Functie Wij hebben drie scrumteams. Het eerste team focust zich op het stukje hardware wat wij in huis doen. Zij maken als team o.a. gebruik van C++. De andere twee scrumteams zijn allebei bezig met data verwerking en maken hierbij in de backend gebruik van C# .NET / .NET Core. Het verschil tussen deze teams is dat één team de data verwerking doet voor de mobiele applicatie. Zij werken hierbij dus ook met Xamarin. Het andere team focust zich op de webapplicaties en maakt hierbij ook gebruik van ASP.NET MVC. Op basis van jouw ambities en kwaliteiten kijken wij samen

Bekijk vacature »

Fullstack developer

Functie omschrijving We are looking for a dutch native speaker Wil jij werken als Senior Developer en werken aan een applicatie die duizenden marketingcampagnes automatisch aanstuurt? Dit is je kans! Kom werken voor onze opdrachtgever en in deze rol zul je veel vrijheid en verantwoordelijkheid krijgen om gezamenlijk de applicatie naar een hoger plan te tillen. Wat ga je verder doen: Optimaliseren, beheren en uitbreiden van onze applicatie; Het bouwen van aansluitingen op de systemen van partners middels API’s; Meedenken over de technische/ontwikkel-standaarden; Proactief verbeterpunten voorstellen. Bedrijfsprofiel Het is een organisatie die met een team van verschillende developers én marketeers

Bekijk vacature »

Software Developer

Longship.io gaat de wereld veroveren met baanbrekende software en legendarische... pizza-avonden! Lees hier de vacature van Software Developer! Bij Longship werken we met een team van 5 mensen aan software voor laadpaal operators. Longship is ontstaan in 2020 met als doel om de elektrische mobiliteitstransitie aan te jagen. We zijn nu al een wereldwijde speler doordat we continu voorop lopen in innovatie. Ons platform helpt het versneld elektrificeren van wagenparken, internationaal! Wij zijn een startup met grote ambities die we willen bereiken met een relatief klein en efficiënt team. Je krijg de kans om ontzettend veel te leren van ervaren

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 »
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

21/11/2024 16:38:10
 
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.