[OOP|SQLite] global vanuit extended class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

(Junior) PHP Ontwikkelaar bij een retail bedrijf i

Bedrijfsomschrijving Ben jij een ervaren PHP ontwikkelaar met een passie voor retail en ICT? Wil jij werken in een team dat zich bezighoudt met het ontwikkelen van uitdagende applicaties voor een groot retailbedrijf in Delft? Dan zijn zij op zoek naar jou! Functieomschrijving Als PHP Ontwikkelaar werk je in een team aan de ontwikkeling van applicaties die door de gehele organisatie worden gebruikt. Je bent verantwoordelijk voor het ontwikkelen, testen en implementeren van deze applicaties. Je werkt hierbij nauw samen met andere ontwikkelaars, projectmanagers en stakeholders binnen de organisatie. Je taken bestaan onder andere uit: Ontwikkelen van nieuwe functionaliteiten en

Bekijk vacature »

Full Stack PHP Developer

Functieomschrijving Ervaren PHP Developer gezocht! Wij zijn op zoek naar een ervaren PHP Developer die het IT team van een organisatie in de regio Ermelo gaat versterken. Voor deze functie zijn we op zoek naar een enthousiaste en breed georiënteerde IT-er die deze innovatieve organisatie nog een stap verder gaat brengen. Wij zijn op zoek naar iemand die communicatief goed is en die zelfstandig problemen op kan lossen. Je bent verantwoordelijk voor het samenwerken met een externe partij het is hierbij jouw taak om deze partij uit te dagen op het geleverde werk. Het schrijven van concepten aan de AI

Bekijk vacature »

Software Developer Java

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

OutSystems Developer

Dit ga je doen Het van scratch af aan ontwikkelen van applicaties met OutSystems; Het aanhaken bij diverse projecten binnen de organisatie; Schakelen met de business; Meedenken over de mogelijkheden van het platform binnen de organisatie. Hier ga je werken Deze organisatie is een toonaangevende speler in de vastgoedbranche en telt momenteel ruim 500 medewerkers. Met meer dan 150 applicaties staat er een complex applicatielandschap, bestaande uit standaard- en maatwerkapplicaties. De maatwerkapplicaties worden ontwikkeld door een inhouse development team. Het doel voor de komende periode is het verder vernieuwen en optimaliseren van het huidige applicatielandschap. Zo staat de organisatie aan

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc 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

Bekijk vacature »

Senior Developer Betty Blocks Blauwe Haven Rotterd

Functieomschrijving Voor de Politie zijn wij opzoek naar een Senior Developer Betty Blocks Blauwe Haven Rotterdam. De politieorganisatie heeft jaarlijks te maken met een aanzienlijk aantal politiemedewerkers die vanwege mentale overbelasting niet of beperkt inzetbaar zijn. De Blauwe Haven Rotterdam ondersteunt deze politiemedewerkers in hun herstel en re-integratieproces. De huidige digitale systemen van de Politie bieden onvoldoende ondersteuning in het herstel- en re-integratieproces van politiemedewerkers. Zowel voor de politiemedewerkers als voor de organisatie. Politiemedewerkers worden buitengesloten, waardoor zij eigen regie verliezen. Begeleiders kunnen de voortgang van de medewerkers niet goed monitoren. Management beschikt niet over de mogelijkheid trends te signaleren

Bekijk vacature »

Fullstack developer

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en zou jij graag bij een platte maar informele organisatie werken? Voor een mooi softwarebedrijf in omgeving Alblasserdam zijn wij op zoek naar versterking op de afdeling Software Development! Als Fullstack react.js developer wordt je bij dit bedrijf onderdeel van de volledige ontwikkeling van requirement tot oplevering! Jouw focus ligt op de front end en alles wat daarbij komt kijken. Je gaat ontwerpen, ontwikkelen, testen en valideren. Je zult voornamelijk werken met React.js en Typescript. Maar ook Javascript, HTML en CSS komen aanbod. Daarnaast zal je ook regelmatig met de back

Bekijk vacature »

C++ Ontwikkelaar

Functieomschrijving Ben jij toe aan een nieuwe uitdaging en werk je graag en goed in C++ en C#? Dan zijn we op zoek naar jou! Dit bedrijf is dé specialist op het gebied van automatiseringssoftware voor een specifieke branche en ze zijn per direct op zoek naar versterking in hun development team. Wat jij gaat doen binnen jouw rol als C++ ontwikkelaar; Je vertaalt de wensen van gebruikers naar een functioneel ontwerp. Je houdt je bezig met het ontwerpen, programmeren en testen van product aanpassingen. Je gaat nieuwe product releases implementeren in de projectteams. Je gaat de effecten van nieuwe

Bekijk vacature »

.NET developer

Functie Als senior .NET ontwikkelaar en aankomend lead developer ben jij in één van de drie development teams verantwoordelijk voor het volgende: • Jij hebt een oogpunt op modernisering en bent verantwoordelijk voor de technische staat en architectuur van de applicatie; • Jij bent verantwoordelijk voor het reviewen van de technische haalbaarheid van verschillende onderwerpen; • Jij bent verantwoordelijk voor een goede aansluiting binnen het multidisciplinaire team en de bijbehorende taken; • Jij bent verantwoordelijk voor het aandragen van verbetervoorstellen en ontwikkelstandaarden in zowel de techniek als architectuur; • Jij bent meewerkend voorman en ondersteunt en coacht jouw team op

Bekijk vacature »

Senior .NET developer

Functie Als Senior .NET ontwikkelaar ga jij aan de slag in ons Research & development team. Ons team bestaat uit 17 collega’s! Wij zijn momenteel druk bezig met het opzetten van een geheel nieuwe architectuur voor een nieuw product. Hierbij maken wij o.a. gebruik van VS2022 en .NET 6.0. Jouw functie is dan ook voornamelijk backend georiënteerd bij ons. Aangezien wij meetapparatuur ontwikkelen voor de chemische industrie is het ook erg belangrijk om kwalitatief hoogwaardige software te ontwikkelen voor de besturing hiervan. Verder ben jij verantwoordelijk voor het designen, implementeren en testen van nieuwe features. Ook zorg jij voor toekomstbestendige

Bekijk vacature »

Node.js developer looking for a challenging consul

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

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 »

Lead C++ Developer

The role of Lead C++ Developer As Lead C++ Developer at KUBUS you will be responsible for the implementation design of requirements and the software architecture of the desktop applications of BIMcollab, our platform for 3D model validation and issue management aimed at improving the quality of 3D building design models. Better 3D models lead to better buildings, thus contributing to the sustainability of the built environment with smarter use of materials, less waste and energy-efficient buildings. A good user experience is of paramount importance to us; we go for innovation and quality in our development. In your role as

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

18/05/2024 23:13:09
 
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.