Regex overflow?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

Front-end developer (React)

Functie Het frontend team bestaat momenteel uit 4 dedicated front-enders en is hard aan het groeien! Ook werken er diverse designers waar je veel mee schakelt. Samen leveren jullie een essentiële bijdrage aan de applicaties die ze voor hun klanten realiseren, jij bent hierin de schakel tussen de eindgebruiker en de slimme backend. Je werkt in het frontend team samen met de backend teams en product owners om te zorgen dat onze applicaties een fijne gebruikerservaring opleveren. Ze werken o.a. met: React, Atomic design, Styled components, JavaScript / TypeScript, NPM, Webpack Blade templates, HTML, SCSS, Git flow. Eisen • HBO

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 »

Developer Front-end

Functie omschrijving Front-end Developer gezocht! Wij zijn op zoek naar een front-end developer voor een organisatie in de regio Veenendaal die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. Je hebt in deze functie een adviserende rol hiervoor moet je beschikken over een grote dosis vakinhoudelijke kennis. Je creëert unieke concepten door samen met collega’s en klanten te overleggen over aangeleverde designs. Hiermee draag jij je steentje bij aan de groeiambities van de klant. Jij wordt het vaste aanspreekpunt voor klanten wanneer het gaat over planningen, hierin is het jouw taak om alle betrokkenen goed

Bekijk vacature »

PHP Programmeur

Functieomschrijving Vanuit het hoofdkantoor in omgeving Breda, ontwikkel je als PHP programmeur niet alleen webapplicaties, maar ben je verder ook gefocust op het constant inspelen op nieuwe innovaties m.b.t software ontwikkeling. Naast het ontwikkelen van webapplicaties, bouwt deze toffe werkgever ook webshops en websites voor hun opdrachtgevers. Wat ga je doen? Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klanten; Het ontwerpen en implementeren van webapplicaties met het Symfony framework; Het schrijven van een schone en efficiënte code volgens het Symfony framework; Onderhouden en updaten van bestaande applicaties die

Bekijk vacature »

Ervaren PHP ontwikkelaar

Functie Jij als PHP ontwikkelaar komt te werken in een team van 4 andere PHP ontwikkelaars. Je zult je voornamelijk bezig houden met: – Het ontwikkelen van nieuwe features – Doorontwikkelen van de API – Nadenken over de technische infrastructuur – Datakwaliteit Samen met het team ben jij verantwoordelijk voor de verdere ontwikkeling van de software en om de positie als marktleider in Europa te behouden. Ze werken volgens SCRUM in 2 wekelijkse sprints, werken met Jira voor alle tickets en communiceren veel via Slack. Eisen • Minimaal 3 jaar ervaring als back end developer • Je hebt affiniteit met

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 »

Back-end Programmeur

Functieomschrijving Heb jij kort geleden je HBO ICT in ontvangst mogen nemen? Of ben je toe aan een nieuwe uitdaging? Voor een ambitieuze werkgever in de regio van Breda zijn wij op zoek naar een Back-end programmeur met affiniteit met C#.NET, SQL en MS Access. Samen met team bestaand uit ware ICT professionals ben je verantwoordelijk voor het bouwen van maatwerk software voor hun klanten. Belangrijk is dat je kennis of ervaring hebt van C#.NET en SQL. Je toont een flexibele en sociale houding naar klanten toe. Je denkt in nieuwe mogelijkheden & gaat graag de uitdaging aan. Bedrijfsprofiel De

Bekijk vacature »

In-house .NET software developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house development functie? Maak jij graag hét verschil m.b.t. interne automatisering? Haal jij energie uit het automatiseren van processen voor je eigen collega's? Dan hebben wij de perfecte vacature voor je! Voor een gezellig Brabants familiebedrijf, zijn wij op zoek naar een .NET software developer. Je gaat in deze zelfstandige functie werken aan de ontwikkeling van eigen applicaties & en het koppelen van deze applicaties aan de ingekocht software. Jouw werkzaamheden zien er als volgt uit: Het management team signaleert behoeftes vanuit de business. Vervolgens worden deze behoeftes uitgewerkt en geprioriteerd.

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 »

Java Developer

Dit ga je doen Het ontwikkelen van nieuwe software; Het ombouwen van de bestaande software; Zowel back- als front-end software ontwikkelen; Het testen; Het implementeren van de volledig geteste software; Het verzorgen van nazorg en het oplossen van bugs; Het opstellen en bijhouden van procesdocumentatie; Je draagt bij aan het agile/scrum processen van het team. Hier ga je werken Ongetwijfeld heb je een of meerdere producten van deze organisatie in huis. Het proces erachter, daar ben je ongetwijfeld minder bekend mee. Deze opdracht geeft je de kans meer over dit proces te weten te komen en een mooie bijdrage te

Bekijk vacature »

Fullstack Developer

Functieomschrijving Heb je kort geleden jouw HBO diploma ICT development behaald? Of zit je nog aan het begin van je carrière en heb je affiniteit met C#.NET? Voor een erkende werkgever in de omgeving van Oosterhout zijn wij op zoek naar een fullstack developer. Als C#.NET developer werk je samen met een vooruitstrevend team aan het ontwikkelen van maatwerk software voor klanten. Je hebt affiniteit met SQL, maar nog belangrijker is dat je kennis en ervaring hebt met C#.NET. Jouw werkzaamheden zien er als volgt uit: Het ontwikkelen van onze high-availability en high-performance backend; Je begint de dag rond 8:30

Bekijk vacature »

High level C++ QT Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 13486 Introductie Would you like to be involved in every aspect of software development for our exceptional products, from specification and design to testing and integration? If you're passionate about software development and eager to apply your programming skills to create customer-focused deliverables, then this is the perfect chance for you to expand your expertise. You can become a member of our Machine Control department's data-driven development team, where you'll design and build software solutions that optimize machine productivity. As a senior software design engineer, you'll participate in all phases

Bekijk vacature »

IoT Software Developer PHP

Functie omschrijving Voor een klein softwarebedrijf in Breda, zijn wij op zoek naar een IoT software developer met kennis van PHP. In deze rol wordt je verantwoordelijk voor het vernieuwen van het multimedia platform van een super tof bedrijf in Breda. Je gebruikt PHP als programmeerlaag, en bent in staat om de helicopterview te pakken / projectmatig te werken. Jouw werkzaamheden zien er als volgt uit: Je gaat aan de slag met de ontwikkeling en vernieuwing van het "intern" ontwikkelde multimedia platform. Je neemt de lead in het moderniseren van het platform door het deels opnieuw op te zetten of

Bekijk vacature »

Senior/Lead Python developer

Functie Samen met je team, bestaande uit een senior, 2 mediors en één junior ontwikkelaar ga je op een Agile-gebaseerde aanpak werken aan hun software. Je hebt oog voor kwaliteit, risico’s en klantbelang. Communicatie met je collega’s en waar nodig ook met klanten speelt een belangrijke rol in het bereiken van een succesvol resultaat. Als persoon ben je slim, krijg je dingen voor elkaar en ga je resultaatgericht te werk. Binnen het development team is er veel zelfstandigheid, los van de stand-up (10:00 uur) en zo nu en dan pair-programming sessies. Technieken die zij gebruiken zijn o.a. Python, Django, MySQL,

Bekijk vacature »
Martijn Wieringa

Martijn Wieringa

13/04/2007 08:53:00
Quote Anchor link
Ik gebruik wat regex functies voor het splitsen en/of valideren van strings.

Nu lijkt echter dat wanneer de string langer is dan een x aantal karakters, dat ik een 'error 500 interne server fout' krijg. Met kortere strings is er echter geen probleem

Zowel de preg_match_all als de preg_split geven zo'n fout bij een te lange string.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

    $string
= "UPDATE `#_module_webpage` SET `content` = 'Lorem ipsum..' WHERE `id` = '3' LIMIT 1;";

    $expr = '/([^\']+)|(\'((\\\\.)|([^\']))+\')/i';
    $matches = array();

    preg_match_all($expr, $string, $matches);

    print_r($matches);

?>


Weet iemand toevallig of dit opgelost kan worden (er kan zoveel geconfigureerd worden ;))
 
PHP hulp

PHP hulp

07/05/2024 20:16:12
 
Jelmer -

Jelmer -

13/04/2007 10:02:00
Quote Anchor link
Geven je error logs misschien meer informatie? Apache zal toch wel ergens vermelden wat er mis ging...
 
Baarr

Baarr

13/04/2007 10:33:00
Quote Anchor link
Waarom doe je overigens een regex op een complete query ?

Wat doen die hekjes in je tabel namen ? waarom geen mooiere namen

Wat doen die back-ticks in je query ? gewoon wegpleuren
 
Mebus  Hackintosh

Mebus Hackintosh

13/04/2007 10:37:00
Quote Anchor link
Baarr schreef op 13.04.2007 10:33:
Waarom doe je overigens een regex op een complete query ?

Wat doen die hekjes in je tabel namen ? waarom geen mooiere namen

Wat doen die back-ticks in je query ? gewoon wegpleuren


Die backticks kan je anders wel gebruiken voor gereserveerde worden in mysql... Kan je die worden toch nog gebruiken:) link

Edit:
Moet ie die worden wel gebruiken anders hebben die backticks inderdaad geen nut
Gewijzigd op 01/01/1970 01:00:00 door Mebus Hackintosh
 
Robert Deiman

Robert Deiman

13/04/2007 10:57:00
Quote Anchor link
@Pholeron

Ik weet niet precies hoe het zit, maar die error heeft volgens mij niet met de duur van je uitvoer te maken. Je kan wel proberen om je string in stukjes te knippen. (gebruik hiervoor bijvoorbeeld het script dat strings afkort op een aantal tekens, maar wel de woorden in tact laat. Staat in de script lib)

Edit:
Offtopic:

@mebus

Het is voor jezelf veel gemakkelijker om gewoon goede namen te kiezen die niet overeenkomen met gereserveerde woorden. Een simpele query kan daardoor toch verkeerd worden gelezen/ begrepen wanneer je hem terugleest, en als je een keer backticks vergeet werkt het niet, bijv:

Een setup voor een tabel met shows die worden gegeven. Waarbij het ook mogelijk is om de weergave van een show te blokkeren, omdat die bijv nog niet vast staat.

TABLE: Show
id
name
description
show (laat zien of niet)

Snap je wat ik bedoel? Als je nu een show (weergave) in MySQL zou willen doen van deze tabel, dan krijg je een query waarin het woord Show nogal vaak voorkomt, wat voor je eigen overzicht niet handig is.

Kies dan als tabelnaam bijvoorbeeld: Show_Info (heb je geen backticks bij nodig, en je tabelnaam beschrijft ook nog eens beter wat voor informatie erin zit)
En voor de kolom show -> maak daar bijvoorbeeld viewable van. Ook hierbij heb je dan geen backticks nodig, en het beschrijft ook het doel van die kolom beter.

Door op zo'n manier met je database om te gaan hou je je tabellen en query's eigenlijk heel eenvoudig. En door juiste namen te gebruiken kan je ook heel snel de bedoeling van een query begrijpen, zonder dat je daar andere informatie dan de query zelf voor nodig bent.

Verder lijkt het me beter maar weer ontopic verder te gaan. :)
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
 
Martijn Wieringa

Martijn Wieringa

13/04/2007 11:01:00
Quote Anchor link
Euhm, waarom dit alles:

De queries vorden verwerkt in een CMS systeem.
Dit CMS hanteerd een tabel-naam-prefix die in queries steeds wordt aangeduid met een hekje.

Deze functie vervangt vervolgens de hekjes met de geconfigureerde prefix.

Om te voorkomen dat hekjes in data niet worden vervangen door de ingestelde prefix, wordt in de query de boel gesplits naar waarden tussen single quotes (data), en alle overige waarden (tabelnamen e.d.). Op deze laatste wordt een str_replace losgelaten die alle hekjes vervangt door de ingestelde prefix.

Op mijn server gaat dat goed, maar op een andere server (waar ik het CMS heb geinstalleerd) treden er problemen op als de query te lang is.
 
Martijn Wieringa

Martijn Wieringa

13/04/2007 11:03:00
Quote Anchor link
Dit is trouwens de database class die ik gebruik binnen het CMS.

Zie de __setPrefix() functie onderin..



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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
<?php

    class Database
    {
        var
$resource; // Stores the resource identifier of the connection to the SQL server.

        var $user; // username
        var $pass; // password
        var $name; // name of the database
        var $host; // host (An IP or 'localhost')
        var $prefix; // Table prefix (replace "#" for "[prefix]").
        var $charset; // communication charset


        // Creates a new database

        function Database($user, $pass, $name, $host = "localhost", $prefix = false, $charset = false)
        {

            // Connect to database server
            if($this->resource = mysql_connect($host, $user, $pass))
            {

                // Select a database on the MySQL Server
                if(mysql_select_db($name))
                {

                    // Locked to requested database
                    $this->user = $user;
                    $this->pass = "**********"; // $this->pass = $pass;
                    $this->name = $name;
                    $this->host = $host;
                    $this->prefix = $prefix;
                    $this->charset = $charset;

                    if($charset)
                    {

                        // Set communication characterset
                        $sQuery = "SET CHARACTER SET '" . $charset . "';";
                        $this->execute($sQuery, __FILE__, __LINE__);
                    }
                }

                else
                {
                    // Error while selecting database
                    exit("Error while connecting to database\nFile: " . __FILE__  . ", Line: " . __LINE__ . ".");
                }
            }

            else
            {
                // Error while connection to server
                exit("Error while connecting to database.\nFile: " . __FILE__  . ", Line: " . __LINE__ . ".");
            }
        }


        // Function to execute a SQL stetement (eg. DELETE/INSERT/UPDATE).
        function execute($sQuery, $sFile = false, $iLine = 0)
        {

            $sQuery = $this->__setPrefix($sQuery);

            if(mysql_query($sQuery, $this->resource))
            {

                return true;
            }

            else
            {
                $this->__reportError($sQuery, $sFile, $iLine);
            }
        }


        // Returns the list of fieldnames within a table.
        function getColumns($sTableName, $bSort = true)
        {

            $aColumns = array();

            $sQuery = "SHOW COLUMNS FROM `" . $sTableName . "`;";
            $rsResults = $this->getRecords($sQuery, true, __FILE__, __LINE__);

            for($i = 1; $i < sizeof($rsResults); $i++)
            {

                $aColumns[] = $rsResults[$i][$rsResults[0][0]];
            }


            if($bSort)
            {

                if(sizeof($aColumns) > 1)
                {

                    usort($aColumns, "strcasecmp");
                }
            }


            return $aColumns;
        }


        // Returns the last created record-id (only works after an INSERT-statement).
        function getId()
        {

            return mysql_insert_id($this->resource);
        }


        // Returns upto 1 record after running a SQL-statement.
        // No results will return FALSE.

        function getRecord($sQuery, $sFile = false, $iLine = 0)
        {

            $rsResults = $this->getRecords($sQuery, false, $sFile, $iLine);

            if(sizeof($rsResults) > 0)
            {

                return $rsResults[0];
            }


            return false;
        }


        // Returns all records after running a SQL-statement.
        // The columnnames are stored at index
        // No results will return an array with only the columnnames (at index 0).

        function getRecords($sQuery, $bAddHeader = false, $sFile = false, $iLine = 0)
        {

            $sQuery = $this->__setPrefix($sQuery);
            $aResults = array();

            if($rsResults = mysql_query($sQuery, $this->resource))
            {

                if($bAddHeader)
                {

                    $aHeader = array();

                    if(mysql_num_rows($rsResults) > 0)
                    {

                        $aResult = mysql_fetch_array($rsResults, MYSQL_ASSOC);

                        foreach($aResult AS $sKey => $sVal)
                        {

                            $aHeader[] = $sKey;
                        }


                        $aResults[] = $aHeader;
                        $aResults[] = $aResult;
                    }

                    else
                    {
                        while($aField = mysql_fetch_field($rsResults))
                        {

                            $aHeader[] = $aField->name;
                        }


                        $aResults[] = $aHeader;
                    }
                }

                
                while($aResult = mysql_fetch_array($rsResults, MYSQL_ASSOC))
                {

                    $aResults[] = $aResult;
                }


                mysql_free_result($rsResults);
            }

            else
            {
                $this->__reportError($sQuery, $sFile, $iLine);
            }


            return $aResults;
        }


        // Returns the list of tables within the current database.
        function getTables($bSort = true)
        {

            $aTables = array();

            $sQuery = "SHOW TABLES FROM `" . $this->name . "`;";
            $rsResults = $this->getRecords($sQuery, true, __FILE__, __LINE__);

            for($i = 1; $i < sizeof($rsResults); $i++)
            {

                $aTables[] = $rsResults[$i][$rsResults[0][0]];
            }


            if($bSort)
            {

                if(sizeof($aTables) > 1)
                {

                    usort($aTables, "strcasecmp");
                }
            }


            return $aTables;
        }



        // Returns true if a column exists, false otherwise.
        // Note: Columnnames are CASE SENSITIVE in MySQL!!

        function isColumn($sTableName, $sFieldName)
        {

            // Get all fields withing table
            $aFields = $this->getColumns($sTableName);
            return in_array($sFieldName, $aFields);
        }


        // Returns true if a field table, false otherwise.
        // Note: Tablenames are CASE SENSITIVE in MySQL!!

        function isTable($sTableName)
        {

            if($this->prefix !== false)
            {

                if(strcasecmp(substr($sTableName, 0, 1), '#') === 0) // Tablename starts with #
                {
                    $sTableName = $this->prefix . substr($sTableName, 1);
                }
            }


            // Get all tables withing database
            $aTables = $this->getTables();
            return in_array($sTableName, $aTables);
        }


        // Print SQL output into a HTML based table.
        // Note: This function was added to support the testing of SQL queries.

        function printSQL($sQuery)
        {

            // Execute SQL and retrieve records
            $rsRecords = $this->getRecords($sQuery, true, __FILE__, __LINE__);

            $result = highlight_sql($sQuery, true)
            .
'<table border="1" cellpadding="5" cellspacing="0">';

            // Create header
            $result .= '<tr>';
            
            for($col = 0; $col < sizeof($rsRecords[0]); $col++)
            {

                $result .= '<th align="left" valign="top">' . str_replace("\n", "<br>", htmlentities($rsRecords[0][$col])) . '&nbsp;</th>';
            }


            $result .= '</tr>';

            // Create records
            for($row = 1; $row < sizeof($rsRecords); $row++)
            {

                $result .= '<tr>';

                for($col = 0; $col < sizeof($rsRecords[0]); $col++)
                {

                    $result .= '<td align="left" valign="top">' . str_replace("\n", "<br>", htmlentities($rsRecords[$row][$rsRecords[0][$col]])) . '&nbsp;</td>';
                }


                $result .= '</tr>';
            }


            $result .= '</table>';

            // Print output
            exit($result);
        }


        // Replace tablenames with # for the given prefix
        function __setPrefix($query)
        {

            $result = '';

            if($this->prefix !== false)
            {

                $expr = '/(\'((\\\\.)|[^\\\\\\\'])*\')|(\`((\\\\.)|[^\\\\\\\`])*\`)|([a-z0-9_]+)|([\s\n]+)|(.)/i';
                preg_match_all($expr, $query, $matches);

                for($i = 0; $i < sizeof($matches[0]); $i++)
                {

                    if(strcasecmp($match = $matches[0][$i], "") !== 0)
                    {

                        if(strcasecmp(substr($match, 0, 1), "'") === 0)
                        {

                            $result .= $match;
                        }

                        else
                        {
                            $result .= str_replace("#", $this->prefix, $match);
                        }
                    }
                }
            }


            return $result;
        }

        function
__reportError($sQuery, $sFile = false, $iLine = 0)
        {

            $result = '<h1>Error in query:</h1>'
            . '<p><b>Query:</b></p>'
            . (function_exists('highlight_sql') ? highlight_sql($sQuery, true) : $sQuery)
            .
'<p><b>Error number:</b><br>' . htmlentities(mysql_errno($this->resource)) . '</p>'
            . '<p><b>Error message:</b><br>' . htmlentities(mysql_error($this->resource)) . '</p>';

            if($sFile !== false)
            {

                $result .= '<h1>Query invoked in:</h1>'
                . '<p><b>File:</b><br>' . htmlentities($sFile) . '</p>'
                . '<p><b>Line:</b><br>' . htmlentities($iLine) . '</p>';
            }


            exit($result);
        }
    }


?>
Gewijzigd op 01/01/1970 01:00:00 door Martijn Wieringa
 
Mebus  Hackintosh

Mebus Hackintosh

13/04/2007 11:03:00
Quote Anchor link
@Robert zelf gebruik ik geen backticks in me query's of tabellen:) En als ik een gereserveerd woord tegenkom dan verzin ik er gewoon een andere voor:)

Maar ik snap wat je bedoelt:)
 
Martijn Wieringa

Martijn Wieringa

13/04/2007 11:25:00
Quote Anchor link
<offtopic>

Over backticks:

Backticks zijn in mijn ogen een standaard onderdeel van de SQL syntax..

Net als dat de openingtag van PHP officieel "< ? php" is, en niet "< ?". Toch werken ze allebei ;)

Door backticks voor kolomnamen expliciet te gebruiken worden (in mijn ogen) queries leesbaarder. 't is een questie van smaak, gewoonte en (mogelijk) gemakzucht dan wel het een of het ander te gebruiken..



Tevens worden door gebruik van backticks spaties, speciale tekens en gereserveerde 'keywords' toegankelijk als/in tabelnamen. Niet dat ik hierbij een discussie aan wil gaan of het gebruik van spaties o.i.d. aan te raden is in een tabelnaam.. maar de 'technische beperking' is in ieder geval geen excuus meer..

</offtopic>
Gewijzigd op 01/01/1970 01:00:00 door Martijn Wieringa
 
Martijn Wieringa

Martijn Wieringa

16/04/2007 12:20:00
Quote Anchor link
Ik heb wat verder gezocht maar 'k kon geen zinnige verklaring vinden :( Dus ik heb in php een oplossing geschreven..

Wat kunnen die regex toch efficient zijn ;)

Vergelijk
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

function __splitQuery($sQuery)
{

    $expr = '/(\'((\\\\.)|[^\\\\\\\'])*\')|(\`((\\\\.)|[^\\\\\\\`])*\`)|([a-z0-9_]+)|([\s\n]+)|(.)/i';
    preg_match_all($expr, $sQuery, $matches);

    return $matches[0];
}


?>

maar eens met de code:
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
<?php

function __splitQuery($sQuery)
{

    $aResult = array();

    $bEscaped = false;
    $bQuoted = false;
    $bBackticked = false;

    $sBuffer = '';
    $iLength = strlen($sQuery);

    for($i = 0; $i < $iLength; $i++)
    {

        $char = $sQuery[$i];

        if((strcmp($char, "'") === 0) && ($bEscaped === false) && ($bBackticked === false)) // Quotes
        {
            if($bQuoted)
            {

                $sBuffer .= $char; // Add closing quote to buffer
                $aResult[] = $sBuffer; // Add buffer to result
                $sBuffer = ''; // Clear buffer

                $bQuoted = false; // Set quoted flag
            }
            else
            {
                $aResult[] = $sBuffer; // Add buffer to result
                $sBuffer = ''; // Clear buffer
                $sBuffer .= $char; // Add opening quote to buffer

                $bQuoted = true; // Set quoted flag
            }
        }

        elseif((strcmp($char, "`") === 0) && ($bEscaped === false) && ($bQuoted === false)) // Backticks
        {
            if($bBackticked)
            {

                $sBuffer .= $char; // Add closing backtick to buffer
                $aResult[] = $sBuffer; // Add buffer to result
                $sBuffer = ''; // Clear buffer

                $bBackticked = false; // Set backtick flag
            }
            else
            {
                $aResult[] = $sBuffer; // Add buffer to result
                $sBuffer = ''; // Clear buffer
                $sBuffer .= $char; // Add opening backtick to buffer

                $bBackticked = true; // Set backtick flag
            }
        }

        else
        {
            // Backslashes
            if((strcmp($char, "\\") === 0) && ($bQuoted || $bBackticked))
            {

                $bEscaped = ($bEscaped === false);
            }

            else
            {
                $bEscaped = false;
            }


            $sBuffer .= $char;
        }
    }


    if(strlen($sBuffer) > 0)
    {

        $aResult[] = $sBuffer;
    }


    return $aResult;

}


?>
Gewijzigd op 01/01/1970 01:00:00 door Martijn Wieringa
 
Jan Koehoorn

Jan Koehoorn

16/04/2007 12:33:00
Quote Anchor link
Ja, dat scheelt nogal een slok op een borrel. Maar misschien is de code van jouw eigen functie wel veel korter dan de source code voor preg_match_all. (vermoed van wel)
 



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.