UTF ??? probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

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 »

SQL ontwikkelaar

Functieomschrijving Voor een gave werkgever in regio Breda zijn wij per direct op zoek naar een SQL ontwikkelaar/ functioneel consultant. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt als volgt uit te zien: Je test de ontwikkelde oplossingen om er zeker van te zijn dat deze voldoen aan de functionele specificaties en de behoeften van de organisatie; Je ontwerpt, ontwikkelt en implementeert SQL-databases om de data behoeften van de organisatie te ondersteunen; Je stelt op

Bekijk vacature »

SQL beheerder / ontwikkelaar

Functie omschrijving Voor een klant in omgeving Tiel zijn wij op zoek naar een SQL beheerder met affiniteit met technisch applicatiebeheer. Je krijgt een fijne in-house werkplek waar je gaat werken aan diverse projecten. Dit bedrijf doet het beheer van databases voor een aantal bancaire klanten. Op dit momenten hebben zij ruim 1500 databases in beheer. Jouw werkzaamheden gaan er als volgt uit zien: Je gaat de development afdeling ondersteunen bij het ontwikkelen van MS SQL Scripts. Je zal zowel zelfstandig als in teamverband MS SQL databases installeren & beheren. Je monitort en onderzoekt incidenten en de achterliggende oorzaken. Je

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 »

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 »

Productontwikkelaar Food

Wat ga je doen Als Productontwikkelaar Food ga je nieuwe producten ontwikkelen en bestaande producten verbeteren. Je bent hierbij betrokken bij het gehele proces: van productconcept naar proefreceptuur, het realiseren va het product (op kleine schaal) en het testen van producten in een productieomgeving. Verder: Bewaak je de status van verschillende fases van productontwikkeling en lever je tijdig de benodigde data aan Ben je bezig met de optimalisatie van oude en nieuwe recepturen Begeleid of organiseer je proefsessies (sensorisch onderzoek) in het team en/of bij klanten Onderhoud je contacten met de klanten, leveranciers van grondstoffen e.a. externe partijen Houd je

Bekijk vacature »

C# .NET Developer

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Bennekom gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Bedrijfsprofiel De organisatie waar je voor gaat werken heeft een onafhankelijk dataplatform ontwikkelt voor de agrarische sector.

Bekijk vacature »

.NET Developer Senior

Dit ga je doen Het ontwikkelen van backend applicaties in C#; Het maken van vele koppelingen met andere ERP-applicaties zoals JD Edwards en SAP; Je bent (mede) verantwoordelijk voor het opstellen van technisch ontwerpen voor de te ontwikkelen software oplossingen; Je bent gemiddeld 90% van je tijd inhouse oplossingen aan het ontwikkelen en testen. De overige 10% van je tijd ben je bij klanten op locatie om oplossingen te implementeren, klanten te begeleiden en de software verder te innoveren; Naast het zelfstandig ontwikkelen van software oplossingen ben je ook bezig met het waarborgen van je contacten bij de klant, het

Bekijk vacature »

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Software Ontwikkelaar PHP

Functie omschrijving Full Stack Software Ontwikkelaar gezocht! Voor een bedrijf in de regio van Ermelo zijn wij op zoek naar een Software Ontwikkelaar die gaat bijdragen aan het door ontwikkelen, onderhouden en optimaliseren van SaaS applicatie van dit bedrijf. Hierbij ga jij voor- en samenwerken met de klanten van de organisatie, het is hierbij dus van groot belang dat je communicatief vaardig bent en dat je beschikt over beheersing van zowel de Nederlandse als Engelse taal. Bedrijfsprofiel Waar ga je werken? Altijd al in een echt familiebedrijf willen werken? Dan is dit je kans! Het bedrijf waar je komt te

Bekijk vacature »

Lead Webdeveloper

As Lead Web Developer at KUBUS you are responsible for the implementation design of requirements and the software architecture of the web application and services of BIMcollab. In your role as lead developer you will naturally search for the optimum between the required implementation time, the performance of the application and a fast go-to-market of features, in line with our automated test and release train. Together with the other senior developers in your team you monitor the architecture of the application and you advise the product owner about necessary refactoring to improve the maintainability of the platform. Our development team

Bekijk vacature »

Front end developer

Functie Jij als ervaren Front end developer bent een expert het gebied van Javascript en React. Je wordt onderdeel van een multidisciplinair team bestaande uit een PO, twee Front end developers, een DevOps/Back end developer, een UX/UI designer en een projectmanager. Verder is er iemand verantwoordelijk voor de HR en is de algemeen directeur nauw betrokken bij alle projecten. Dagelijks hou jij je bezig met de verschillende projecten die zijn opgenomen in de sprint. Daarnaast denk je mee over mogelijke oplossingen om de behoefte van de klant op de beste manier in te vullen. Verder spar jij intern met collega’s

Bekijk vacature »

Lead developer (PHP, Symfony, DDD)

Functie Als Lead developer zorg je ervoor dat het team (bestaande uit zowel junior als ervaren developers) in staat is om de kwaliteit van de software (en code) verder te verhogen. In samenwerking met het team, de product owner en de andere lead developers zet je technische lijnen uit en bepaal je de prioriteiten per sprint. Lijkt het jou interessant om complexe problemen op te lossen en bijvoorbeeld een nieuwe applicatiestructuur in Symfony op te zetten? Dan komen wij graag met je in contact. Eisen • HBO werk- en denkniveau (ze kijken niet naar papieren, maar naar denkniveau, motivatie en

Bekijk vacature »

Ambitieuze Junior/Medior Low-code Developers gezoc

Bedrijfsomschrijving Transformeer bedrijven met jouw expertise in innovatieve technologie Ben je een bedreven softwareontwikkelaar met ervaring in Low-code platformen, of sta je te popelen om je in deze baanbrekende oplossing te verdiepen? Wij zijn op zoek naar jou! Ons klantenbestand groeit en we willen ons team uitbreiden met deskundige en leergierige Low-code specialisten. Is het jouw passie om organisaties te ondersteunen in hun digitale transformatie en maatwerkoplossingen te bieden met behulp van geavanceerde software? Wij zijn een vooruitstrevend bedrijf dat dagelijks werkt aan het oplossen van complexe vraagstukken om de digitale ambities van onze klanten te realiseren. Functieomschrijving Ontwikkel op

Bekijk vacature »
Ignace Verschaeve

Ignace Verschaeve

02/02/2024 18:00:09
Quote Anchor link
Ik wil via een csv file mijn database telkens aanvullen en/of updaten. Dit werkt, alleen ik slaag er niet in om een naamveld waar een single quote in staat in te lezen. Bijvoorbeeld een naam als D'Haenens met een single qoute wil die niet ik krijg telkens de foutmelding dat ik mijn syntax voor MariaDB moet aanpassen. Mijn collatie staat op utf8mb4_general_ci maar ik heb al andere collaties toegepast maar ik vind de juiste niet.
Als ik de singel qoute uit de tekst weglaat is er natuurlijk geen probleem. Hoe zou ik dat kunnen oplossen?
Dus de database is de laatste versie MariaDB gehost bij one.com. De csv file is gemaakt/weggeschreven als csvutf8.
Bedankt op voorhand.
Dit is de foutmelding:
d1002 Dhaenens, D'Haene, Dehaene,: Error updating record: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Haene, Dehaene,' WHERE IDR LIKE 'd1002'' at line 2
Gewijzigd op 02/02/2024 18:02:43 door Ignace Verschaeve
 
PHP hulp

PHP hulp

28/04/2024 04:19:23
 
- Ariën  -
Beheerder

- Ariën -

02/02/2024 18:19:35
Quote Anchor link
Dit lijkt mij een klassiek geval van escaping vergeten in je query.

In veel gevallen is je data niet goed als je ???? (ja, vraagtekens) ziet, of je benadert de data niet op de juiste manier. Waarschijnlijk heb je een verkeerde character encoding. (hier op PHPhulp ook, trouwens. Maar dat moet ik nog eens onderzoeken als ik een goede testopstelling gemaakt heb).

Dit is een interessant topic over UTF-8:
https://www.phphulp.nl/php/forum/topic/diakritische-tekens-als-weergegeven/103004/1/
Gewijzigd op 02/02/2024 18:25:41 door - Ariën -
 
Ignace Verschaeve

Ignace Verschaeve

02/02/2024 18:34:20
Quote Anchor link
Dit is de code om in te lezen
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
// Haal data uit CSV file lijn per lijn
            while(($line = fgetcsv($csvFile,0,";")) !== FALSE){
                // Get rij data
                $IDR  = $line[0];
                $variant  = $line[1];
              
            
                // Uitlezen van de gegevens in de csv
                echo "<span style=\"color: black\">".$IDR." ".$variant.": ";
            
                // Check of er reeds records zijn met dezelfde IDR en namen
                $sqlprev = "SELECT IDR FROM anaamvar WHERE IDR LIKE '$IDR' ";
                $result = $conn->query($sqlprev);
                //$prevResult = $db->query($prevQuery);
                
                if ($result->num_rows > 0)
                    {
                    // Update member data in the database
                    $sqlupd = "UPDATE anaamvar SET
                    variant = '".$variant."'
                    
                    WHERE IDR LIKE '".$IDR."' ";
                    if (mysqli_query($conn, $sqlupd)) {
                    echo "<span style=\"color: black\">".$IDR." "."Record met succes geupdated. " . "<br/>";
                    } else {
                    echo "<span style=\"color: red\">"."Error updating record: " . mysqli_error($conn)."</span>"."<br/>";}
                }
else{
                    
                    $sqlins = "INSERT INTO anaamvar (IDR, variant)
                    VALUES ('".$IDR."',
                            '".$variant."')";
                    if (mysqli_query($conn, $sqlins)) {
                    echo "<span style=\"color: green\">"."-".$IDR." ".$variant." "."Record met succes bijgevoegd. " . "<br/>";
                    } else {
                    echo "<span style=\"color: red\">"."Error invoegen record: " . mysqli_error($conn)."</span>"."<br/>";}
                    $teller ++;
                    
                }
                
            }
            
            // Close opened CSV file
            fclose($csvFile);
            
            $qstring = '?status=succ';
        }else{
            $qstring = '?status=err';
        }
    }else{
        $qstring = '?status=invalid_file';
    
}


Het is eigenlijk een tamelijk simpel gegeven. Ik weet alleen niet hoe ik die single quote kan escapen. Daar reikt mijn magere kennis van PHP niet ver genoeg. IK leer elke dag bij door vallen en opstaan want ik heb nooit een opleiding gehad, alles is zelfstudie.
Gewijzigd op 02/02/2024 18:57:38 door Ignace Verschaeve
 
- Ariën  -
Beheerder

- Ariën -

02/02/2024 19:26:26
Quote Anchor link
Lees je eens in over mysqli's real_escape_string()

Eigenlijk valt dit al onder de basiskennis. Als je dit niet weet dan maak je jouw database behoorlijk lek.
Of gebruik prepared statements. Dan hoef je ook niet extra op deze zorgen te letten.
Gewijzigd op 02/02/2024 19:27:07 door - Ariën -
 
Ignace Verschaeve

Ignace Verschaeve

02/02/2024 19:50:41
Quote Anchor link
Ik weet wel wat over die real escape strings maar niet hoe ik dit kan toepassen op de tabellen/lijnen in het csv bestand. Daar ligt mijn knoop. En kom niet af met theorie. Dat kan ik niet. Ik moet een voorbeeld hebben om dit te begrijpen. Geen droge theoriën aub.
 
- Ariën  -
Beheerder

- Ariën -

02/02/2024 20:41:35
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sqlprev = "SELECT IDR FROM anaamvar WHERE IDR LIKE '$IDR' ";


Je moet gewoon $IDR escapen. Hij struikelt nu over de ' van D'Haene die je query dus kapotmaakt.
Gewijzigd op 02/02/2024 20:42:20 door - Ariën -
 
Ignace Verschaeve

Ignace Verschaeve

03/02/2024 10:04:03
Quote Anchor link
Het is $variant die ik moet escapen want daar staat die D'Haene in.
Dit was de oorspronkelijke code die ik vervangen heb door een real_escape
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$IDR  = $line[0];
      //$variant  = $line[1];
      $variant = mysqli_real_escape_string($csvFile, $line[1]);

Waarbij $csvFile de .csv is waarvan ik inlees.
Maar ik krijg nu volgende foutmelding:
Fatal error: Uncaught TypeError: mysqli_real_escape_string(): Argument #1 ($mysql) must be of type mysqli, resource given in /customers/1/5/0/fv-vl-ardennen.be/httpd.www/beheerder/importdatanaamvar.php:49 Stack trace: #0 /customers/1/5/0/fv-vl-ardennen.be/httpd.www/beheerder/importdatanaamvar.php(49): mysqli_real_escape_string(Resource id #5, 'Aelvoet, Aalvoe...') #1 {main} thrown in /customers/1/5/0/fv-vl-ardennen.be/httpd.www/beheerder/importdatanaamvar.php on line 49
Waarbij die Aelvoet de eerste lijn is in die csv file:
a1000 Aelvoet, Aalvoet, Aelvoedt, Allevoet,

Ik zie niet direct waar ik het fout doe, jullie misschien wel?
Ik volg deze instructies: https://www.php.net/manual/en/function.mysql-real-escape-string.php
 
Adoptive Solution

Adoptive Solution

03/02/2024 10:35:13
Quote Anchor link
Altijd handig, de handleiding :

https://www.w3schools.com/php/func_mysqli_real_escape_string.asp

Denk dat dit voorbeeld in de buurt komt :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);


Zo dus :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$variant = mysqli_real_escape_string($con, $line[1]);
 
Ignace Verschaeve

Ignace Verschaeve

03/02/2024 10:55:28
Quote Anchor link
In het voorbeeld dat je geeft is $con de verbinding naar een database tabel, in mijn geval moet ik naar een csv bestand. Maar je hebt gelijk. Ik was mis in mijn redenering. Nu werkt het, bedankt.
Gewijzigd op 03/02/2024 11:00:24 door Ignace Verschaeve
 
Ivo P

Ivo P

05/02/2024 10:27:32
Quote Anchor link
Het vervelende van
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<?php
$variant
= mysqli_real_escape_string($con, $line[1]); ?>


is, dat $variant nu een bewerkte versie van de naam bevat.
Zou je ergens dit willen gebruiken voor iets anders dan in de query, dan heb je een probleem. (en ja: ik zie dat jij dat op regel 34 inderdaad doet)

Zet je op het scherm
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo 'aangepast het record voor ' . $variant; ?>

Dan gaat dat 99 van de 100 keer goed, maar Jeanne d\'Arc is waarschijnlijk niet wat je op je scherm wilde zien.


Daarom ben ik er voorstander van om dergelijke escaping alleen toe te passen waar je het nodig hebt.
Dus in de opbouw van de query zelf.
(en als tegenhanger bij de opbouw van een html of xml bericht: voor de escaping met htmlspecialchars geldt hetzelfde)

Ik zou dus gekozen hebben voor de aanpassingen op regels 19 en 32:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$sqlupd
= "UPDATE anaamvar SET
                    variant = '"
. mysqli_real_escape_string($conn, $variant)."'
                    
                    WHERE IDR LIKE '"
.$IDR."' ";?>


En eveneens zou ik overal waar je dergelijke input naar je scherm stuurt weer htmlspecialchars() om variabelen zetten.
Is het niet voor bewuste acties van gebruikers, dan voorkom je toch ook problemen door onverwachte "rare" html-tekens in je invoer. Ook als je dat niet verwacht.
 
Ignace Verschaeve

Ignace Verschaeve

05/02/2024 10:56:14
Quote Anchor link
Dat escape teken komt dan wel niet zichtbaar in het uiteindelijke resultaat. En het doet wat ik wil doen. Qua beveiliging volstaat dit door het feit dat enkel bepaalde beheerders deze bewerkingen kunnen toepassen geen gebruikers. In wezen is het enkel alleen ik die het doe. Ik ben bezig met het opstellen van een lijst van 10.000den naamvarianten voor genealogische doeleinden. Gebaseerd op indexen van parochieregisters van omstreeks 1600 tot 1796 waarbij oude vormen gekoppeld worden aan de moderne versies. Mijn fout was dat ik een verkeerde redenering volgde over de werking van de real escape string. Ik slaag er nu eenmaal maar in om theorie te leren aan de hand van de praktijk en niet omgekeerd. Mijn leeftijd zeker?
 
Ivo P

Ivo P

05/02/2024 11:51:57
Quote Anchor link
Het zal zeker werken voor het doel dat je nu voor ogen hebt, maar ik bedoel te zeggen, dat het misgaat in de echo-regel.
Daar komt ten onrecht een \ in te staan.

En escaping van html en sql is niet alleen bedoeld als beveiliging tegen kwaadwillende derden.

Als jij lijsten inleest met geboorteregisters en dergelijke dan kan ik me voorstellen dat een deel daarvan met OCR is ingelezen en dat daarbij een C die wat hoeking geschreven is, zo maar verandert in een <

Of dat iemand bij het overtypen een typfout maakt en een < of iets dergelijks opneemt in de lijst.

Dáár wil je je ook tegen beschermen.
Dat kan leiden tot kapotte invoer in je database, of onverwacht blanco schermen

Voorbeeld?
Ik heb ooit eens een bug moeten zoeken omdat iemand in een fabriek nooit orders kon invoeren in het intranet.
Bij iedereen ging het goed, alleen bij deze gebruiker niet.

Uiteindelijk bleek dat degene die het gebouwd had van mening was dat de invoer uit de database veilig was en dat escaping onnodig zou zijn.

Alleen werd bij de order niet alleen user_id opgeslagen maar ook de naam.
En je raadt het al: deze persoon had een ' zijn naam zitten.

Dat gaf dus overlast voor deze gebruiker;
kostte tijd voor de opvolger van de developer (me)

Daarnaast wil je weer niet dat in je database Dhr Röntgen als "R&oul;tgen" wordt opgeslagen,
en op het scherm wil je de \\\\ niet zien staan.

Daarom ben ik voorstander van:
- altijd escapen op de plek waar het nodig is zodat je niet vertrouwen moet op "10 regels geleden zal dat wel geregeld zijn"
- en ook alleen daar waar het nodig is.

Je loopt dan ook niet aan tegen "ik moet een patch uitvoeren op de naam van dit record."
Want het gaat net zo goed fout bij een ' in de voornaam, geboorteplaats en zijn mailadres (al zullen daar weinig van zijn in dit geval)
 
Ad Fundum

Ad Fundum

07/02/2024 07:45:16
Quote Anchor link
Ignace Verschaeve op 05/02/2024 10:56:14:
Dat escape teken komt dan wel niet zichtbaar in het uiteindelijke resultaat. En het doet wat ik wil doen. Qua beveiliging volstaat dit door het feit dat enkel bepaalde beheerders deze bewerkingen kunnen toepassen geen gebruikers. In wezen is het enkel alleen ik die het doe. Ik ben bezig met het opstellen van een lijst van 10.000den naamvarianten voor genealogische doeleinden. Gebaseerd op indexen van parochieregisters van omstreeks 1600 tot 1796 waarbij oude vormen gekoppeld worden aan de moderne versies. Mijn fout was dat ik een verkeerde redenering volgde over de werking van de real escape string. Ik slaag er nu eenmaal maar in om theorie te leren aan de hand van de praktijk en niet omgekeerd. Mijn leeftijd zeker?

Nee, PHP is nodeloos ingewikkeld, zo is het nu eenmaal, dat heeft niets met leeftijd te maken.
En het gebruik van Mysqli::real_escape_string() is lastig, omdat je zelf heel goed moet snappen hoe je het per geval dient te gebruiken. Daarmee fouten maken kan catastrofaal zijn voor de veiligheid van je programma en de gegevens, SQL injectie staat nog steeds op de 3e plaats van meest voorkomende software fouten in de wereld in 2023: https://cwe.mitre.org/top25/archive/2023/2023_top25_list.html
Laten we eerlijk zijn, mysqli::real_escape_string() helpt daarbij nou niet echt om software veiliger te maken.

Gelukkig bestaat er ook nog zoiets als prepared statements, waarin escaping automatisch gaat. Je hoeft alleen een query te voorzien van plaatsvervangende symbolen, zoals $1, of met namen, zoals met PDO. Aparte PHP variabelen geef je mee aan de functies en escaping gaat dan altijd goed, er is geen onduidelijkheid over welk deel nu SQL code is, en welk deel SQL data. Zie: https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

Het enige jammere van prepared statements is dat het niet voor alle situaties werkt. Stel je wilt de naam van een tabel in een JOIN variabel maken, dan is de enige optie om dat met de hand te doen (zoals met bijna alles waar het leuker wordt met SQL).
Er zijn ook betere databases als PostgreSQL. PostgreSQL heeft in PHP wel ondersteuning met pg_escape_identifier(), en nog veel meer leuke dingen.
Gewijzigd op 07/02/2024 07:47:09 door Ad Fundum
 



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.