UTF ??? probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SQL database developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als SQL database developer? Dit bedrijf bouwt applicaties om processen in distributiecentra te optimaliseren. Ter uitbreiding van het development team zijn wij op zoek naar een SQL database ontwikkelaar. Wil jij werken voor een groeiende werkgever in regio Breda waar jij de ruimte en tijd krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je houdt je bezig met het creëren en bouwen van MS SQL server databases; Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van logistieke processen; Je gaat projecten vanaf het begin tot het

Bekijk vacature »

Full Stack .NET Developer C# ASP.NET

Samengevat: Deze werkgever is gespecialiseerd in het op afstand bewaken en besturen van machines en processen. Ben jij een ervaren Full Stack .NET Developer? Heb je ervaring met C# en ASP.NET? Vaste baan: .Net Developer C# ASP.NET HBO €3.300 - €4.500 Deze werkgever is een snel groeiende onderneming gespecialiseerd in het op afstand bewaken en besturen van machines en processen, IoT (Internet of Things). Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Wil jij bij de top specialisten horen? Ben jij op zoek naar een

Bekijk vacature »

C#.NET-developer - JUNIOR

Functie omschrijving Voor een leuke opdrachtgever in omgeving Brielle zijn wij op zoek naar een junior developer. Werk jij graag met de volgende tools & technieken? C#, .NET, ASP.NET, MVC en SQL? Kijk dan snel of dit iets voor jou is! Als programmeur bij een productiebedrijf zal je voornamelijk nieuwe software schrijven maar ook bestaande software verbeteren. Verder werk je veel samen in back end projecten met leuke collega's. Bedrijfsprofiel Met een team van ruim 130 personen staan ze elke dag weer klaar om IT en Business te combineren door het ontwikkelen van producten op maat. Er zijn 3 teams,

Bekijk vacature »

Digitale Tovenaar Gezocht: Junior Low-code/No-code

Bedrijfsomschrijving Duik mee in een wereld vol innovatieve avonturen waar gegevens en technologie een magische symbiose aangaan! Al meer dan twee decennia lang zijn we de tovenaars achter de schermen die oplossingen creëren voor de meest complexe klantcontactvraagstukken en datagedreven software-uitdagingen. Bij ons draait het om de kracht van samenwerking en groei. We zijn een hechte vriendengroep die samen bergen verzet om elkaar én onze klanten te laten schitteren. Jouw succes is ons succes en we streven ernaar om elkaar naar nieuwe hoogten te tillen, niet voor even, maar voor altijd. We willen dat jij je helemaal thuis voelt in

Bekijk vacature »

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

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 »

PHP Developer

Functie omschrijving Voor een bedrijf in Den Bosch zoek ik een PHP Developer, die al wat werkervaring heeft. Jij gaat aan de slag met de verdere professionalisering van de interne applicaties en software. In de functie ga je verder: Verdere ontwikkeling eigen CRM systeem, vooral middels PHP; Bouwen van verschillende API's & koppelingen; Meedenken om de software/applicaties te verbeteren/optimaliseren; Aan de slag met de interne tooling. Bedrijfsprofiel Dit bedrijf is actief binnen de telecombranche. Het hoofdkantoor zit in regio van Den Bosch en er werken ruim 70 medewerkers, verdeeld over verschillende afdelingen. De afdeling Development bestaat uit vijf collega's, onder

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 »

Medior PHP developer

Functie Het team bestaat inmiddels uit zo’n 25 collega’s met specialisten op het gebied van development, data(analyse), marketing, infrastructuur en finance. Ze hebben een supermodern pand en bieden hiernaast veel vrijheid en verantwoordelijkheid. Ze doen er alles aan om jou op te gemak te stellen. Zo kun je je eigen werkplek inrichten naar persoonlijke wensen, maar gaan ze bijvoorbeeld ook jaarlijks met elkaar wintersporten en zijn er andere leuke uitjes. Als onderdeel van één van de scrumteams ga je aan de slag, samen ben je medeverantwoordelijk voor het doorontwikkelen van hun business applicatie waar het traffic team dagelijks mee werkt.

Bekijk vacature »

Senior Airport Developer ( System engineer)

De functie Nice to know (you) De nieuwe A-pier wordt de duurzaamste van Schiphol. Als deze af is ligt er 4000 vierkante meter zonnepanelen op het dak. En de toiletten? Die spoelen door met regenwater. we gaan ervoor: het creëren van de meest duurzame en hoogwaardige luchthavens ter wereld. een toekomstbestendig en duurzaam Schiphol. Daar werken we elke dag hard aan in team Development & Sustainability. Jij bent regisseur, expert én aanjager van de ontwikkeling van Schiphol. Connecting your world Hoe maak je de ambities en doelstellingen van Schiphol concreet in een project? De waarde voor Schiphol naar eisen die

Bekijk vacature »

.NET Developer C# VB

Samengevat: Deze werkgever is actief in software voor het matchen van vraag en aanbod van gebruikte auto-onderdelen. Ben jij een .NET Developer? Heb je ervaring met het ontwikkelen (REST) en integreren van webservices? Vaste baan: C# .NET Developer C# VB HBO €2.600 - €6.200 Wij ontwikkelen software om vraag en aanbod van onderdelen van personenauto's bij elkaar te brengen. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. De branche van dit bedrijf is Automotive. Functie: Voor de vacature als .NET Developer Dordrecht HBO ga je

Bekijk vacature »

Front-end developer gezocht

Functie Je komt in een team met ambitieuze developers die de passie voor Front-End met jou delen. Samen ga je aan de slag met leuke en leerzame opdrachten. Het team heeft een eigen budget en financiën en zij bepalen zelf hoe dat besteed en investeert wordt. Je gebruikt tools als JavaScript, Node.js, React, Angular, Typescript en Vue.js wanneer je werkt aan de opdrachten. Daarnaast zul je veel leren van je collega’s en gezamenlijk een leuke tijd doorbrengen tijdens activiteiten zoals wintersport, hackatons en conferentiebezoeken. Je krijgt niet alleen de mogelijkheid Front-End te ontwikkelen, maar ook vooral jezelf. Dit kan behaald

Bekijk vacature »

Medior/senior front end developer

Functie Vanwege de groei binnen het bedrijf zijn we op zoek naar versterking in het development team. Als back-end developer bouw je aan de bedrijfssoftware die ons helpt bij de primaire processen. Een leuk (intern) project dus waarbij je de software continu doorontwikkeld! Je werkt in een klein team, we hebben dagelijks stand-ups en iedere twee weken een scrum-sessie, begeleid door onze Scrum Master. Hierin krijg je uitgebreid de kans om je ideeën te presenteren, en te overleggen met je mede-ontwikkelaars en de Product Owner. Binnen de ontwikkelteams gebruiken we Trello, Gitlab, Jiira, Confluence en Boockstack. Hiernaast werken ze met

Bekijk vacature »

Frontend Developer

Dit ga je doen Door ontwikkelen van het online platform Deel uitmaken van verschillende ontwikkelteams Meedenken over UI/UX vraagstukken Uitdragen van Front-end binnen de organisatie Hier ga je werken Deze organisatie, gevestigd in de omgeving van Amsterdam, is een grote onderwijs instelling met meerdere vestigingen en een groot aantal studenten. Zo telt deze organisatie +/- 35.000 gebruikers. Bij deze organisatie staat jouw ontwikkeling centraal en is er veel ruimte voor eigen initiatieven. In samenwerking met jouw team ga jij de online omgeving verder ontwikkelen. In de rol van Front end Developer zal jij 50% van jouw tijd werken in het

Bekijk vacature »

Java developer (remote)

Functie Wat ga je doen als Java Developer? Jij als Java ontwikkelaar komt te werken in 1 van onze SCRUM teams. Momenteel werken er zo’n 30 ontwikkelaars binnen onze organisatie waarbij jij de brug slaat tussen het bouwen van verschillende functionaliteiten binnen onze applicaties en deze vervolgens te integreren in onze centrale hub. Je start je dag om 9 uur met een stand up en dan pak je jouw taken op voor de dag. Hieronder een aantal taken die jij zal uitvoeren: – Het bedenken en uitbouwen van features binnen de verschillende applicaties – Onderhouden van CI/CD pipelines – Bezighouden

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

09/11/2024 03:47:28
 
- 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)
 

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
 



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.