Concatten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior Ontwikkelaar Salesforce

Werken voor de best gewaardeerde Salesforce partner van Nederland? Profit4SF heeft al de kennis in huis rondom Salesforce en is voor uitbreiding op zoek naar een Junior Ontwikkelaar. Ben jij gepassioneerd om code te ontwikkelen in Cloud computing en sta jij open om samen te werken met Senior programmeurs in een jonge en dynamische organisatie? Een baan binnen Profit4SF is een baan die jij zelf kunt vormgeven waarbij we samen jouw tour binnen Profit4SF kunnen samenstellen. Verder zijn wij in staat om verschillende cursussen en trainingen te faciliteren zodat jij als ontwikkelaar kunt groeien binnen onze organisatie! Over de functie

Bekijk vacature »

Medior PHP ontwikkelaar

Bedrijfsinfo Voor een informele organisatie die zich richt op onder andere webdevelopment met name binnen de sociale sector ben ik op zoek naar een medior PHP developer. Binnen deze organisatie krijg je veel vrijheden maar wordt ook veel van je gevraagd! Ze werken voornamelijk aan webapplicaties ter ondersteuning van de sociale sector waarbij de focus ligt op hoogstaande kwaliteit, veiligheid en langdurige samenwerkingsverbanden met het oog op een gestage groei van de organisatie. Functie-omschrijving Je komt te werken in een team van 5 ontwikkelaars en een designer. Binnen dit team draag je veel verantwoordelijkheid voor jouw projecten. Een klein onderdeel

Bekijk vacature »

Medior PHP Developer

Organisatie Voor onze partner gevestigd te Haarlem zoeken we een medior PHP developer. Deze organisatie is in 2001 opgericht op een zolderkamer en uitgegroeid tot de grootste full service digital agency met ruim 60 getalenteerde werknemers daar in de regio. Wegens de vele jaren ervaring is er veel ruimte om nieuwe technieken te ontdekken en aan complexe projecten te werken. Elke klant wordt perfect bediend om de beste applicaties, marketing strategieën, campagnes en designs voor ze te ontwikkelen. Hierbij kom je voor grote A-merken gaan werken. Naast het ontwikkelen van applicaties en complexe websites hebben ze inhouse ook een eigen

Bekijk vacature »

Senior full-stack .NET developer retail

Organisatie De organisatie focust zich daags op het beste resultaat als een van de beste leverancier op het gebied van retail automatisering. Doel is om proactief mee te denken aan een totaal oplossing voor complexe vraagstukken. Klanten variëren van grote winkel ketens (hot brands) naar snel groeiende organisaties in de regio, maar ook in Duitsland én België. Samen met een grote team van inmiddels meer dan 80 medewerkers, is er elke dag weer een nieuwe uitdaging! Team van programmeurs bestaat uit 10 software developers met o.a. 2 senior developers. Je komt te werken binnen een informele werkomgeving. Bij binnenkomst pak

Bekijk vacature »

Junior developer

Organisatie Met 10 man sterk maakt deze organisatie de gaafste campagnes. Een campagne maken duurt gemiddeld 6 tot 8 weken waarna de campagne vervolgens ook 6 tot 8 weken online zal zijn. Dit doet deze organisatie niet alleen voor grote merken zelf maar ook voor Nederlands grootste reclame bureaus. Naast de campagnes wordt er ook veel gebrainstormd over eigen projecten en producten en is deze organisatie bezig om ook hun eigen product te lanceren. Bij deze organisatie vind iedereen het heel belangrijk om ook genoeg tijd voor hun privé leven te hebben, daarom wordt er lang niet iedere week een

Bekijk vacature »

.NET Developer, uitdagende functie bij detacheerde

Functieomschrijving In jouw functie is het belangrijk dat je kwalitatief hoogstaande code schrijft, hiervoor heb je al ruime kennis van alles binnen het .NET Framework. Bij de bedrijven waar je gedetacheerd wordt ga je zelfstandig aan de slag en toon je een probleemoplossend karakter, jij bent de aanpakker die dit bedrijf nodig heeft. Je vindt het leuk om verschillende projecten te draaien, je bent flexibel, je leert graag en deelt met alle liefde jouw kennis en kunde met jouw collega's. Je krijgt energie van complexe vraagstukken en bent graag innovatief bezig. Je bent een professionele en ambitieuze medewerker, die goed

Bekijk vacature »

Front-end Developer

Organisatie Ben jij een ‘eind baas’ als het gaat om programmeren maar ondanks dat jij al tot de beste ontwikkelaars hoort weet je dat het altijd beter kan? Zowel starters als ervaren ontwikkelaars werken samen binnen dit bedrijf. Ze hebben allemaal 1 overeenkomst en dat is passie voor het vak, iets willen betekenen en willen bereiken. Binnen dit bedrijf krijg je de ruimte om zowel jezelf persoonlijk als zakelijk te laten groeien. Om een echte eindbaas te worden worden er iedere 2 maanden hackathons georganiseerd. Dit kan een case zijn voor bijvoorbeeld Jumbo, Achmea of Deloitte. Je gaat dan 2

Bekijk vacature »

Senior C# .NET developer import- exportbranche

Organisatie Deze organisatie is gevestigd in de omgeving van Eindhoven. Deze organisatie is een van de grootste leveranciers van maatwerksoftware binnen de import en export branche. Wanneer je als organisatie wereldwijd aan klanten levert krijg je te maken met de douane. Alle producten die naar het buitenland worden verstuurd moeten worden geregistreerd. Deze organisatie heeft eigen unieke software ontwikkeld om dit proces te automatiseren. Deze organisatie is marktleider op het gebied van import- en export software. Het is een open organisatie die veel waarde hecht aan jouw mening en ervaring. Functie Het team bestaat uit vijf ervaren developers. Van de

Bekijk vacature »

Junior PHP Developer Onderwijssoftware

Organisatie Je komt te werken binnen een jonge organisatie die 5 jaar geleden is begonnen in een tuinhuisje. Samen met een ervaren programmeur heeft de eigenaresse de eerste applicatie gebouwd. Inmiddels hebben ze er 3 en met de data die daar uit voor komt wordt advies gegeven aan scholen om lessen en de software te verbeteren. Inmiddels is het bedrijf sterk gegroeid en hebben ze meerdere hoge scholen, middelbare scholen en bijna de helft van alle basisscholen binnen hun portfolio. Dat komt vooral omdat iedereen die binnen het bedrijf werkt erg betrokken is bij het product en samen aan iets

Bekijk vacature »

Senior Full Stack Developer

Wil jij van nature alles weten en onderzoeken en wil jij deze eigenschappen combineren met jouw passie voor software development? Dan beschikken wij momenteel over een functie die jou ongetwijfeld op het lijf geschreven is! Voor een business partner in de omgeving van Amstelveen zijn wij momenteel op zoek naar een Senior Full Stack developer. Deze organisatie is momenteel een van de grootste onderzoeksinstellingen van Nederland. Zo weten zij consumentengedrag feilloos in kaart te brengen en meten zij elke avond hoeveel mensen naar welke programma’s kijken op TV. Dit is slechts een kleine greep uit alle leuke projecten waar zij

Bekijk vacature »

Javascript developer Nieuwe functionaliteiten ontw

Dit bedrijf is al meerdere decennia gespecialiseerd in software voor de accounting branche. Waar het begon met MSDOS zijn ze continu doorgegaan met het gebruiken van de beste techniek die er op dat moment beschikbaar is. Daarom werken ze nu met technieken waar je U tegen zegt waaronder AWS. Hun uiteindelijke doel is er zelfs voor zorgen dat de accountant door hun software overbodig wordt; maar daar over later meer. Het team is nu dertig man groot waarvan 1/3e verantwoordelijk is voor de techniek. Binnen het bedrijf hangt een innovatieve “Sillicon Valley” sfeer. De huidige eigenaar heeft het bedrijf ook

Bekijk vacature »

TYPO3 developer Full service digital agency

Organisatie Hier zeggen ze het niet alleen maar hier werken ze er ook echt naar toe om het allerbeste bureau van Nederland te worden met de grootste digitale impact! Als iets goed is, zichzelf heeft bewezen en een voordeel biedt voor de organisatie of jezelf dan gaan ze het hier gebruiken en implementeren. Er heerst hier een platte organisatiestructuur, houden van snel schakelen en zijn fan van innovatie! In 2005 begonnen ze en inmiddels werken zij samen met de leukste klanten, mooiste namen en behoren zij tot de absolute top van de digital agencies. Honderden klanten lieten hun groeien. Samen

Bekijk vacature »

Medior Fullstack developer Tech bedrijf

Voor deze gave organisatie in Amsterdam zijn we op zoek naar goede full stack developers die dit geweldige team van developers wilt gaan versterken. De organisatie is zo’n 40 man groot en heeft op dit moment een development team bestaande uit 10 ontwikkelaars. Niet gek dat elke developer die hier werkt enthousiast is over de organisatie. Zij zitten namelijk in de luxe positie alleen toffe projecten aan te nemen waar ze achter staan. Het is voor hun belangrijk dat de projecten leuk en technisch uitdagend genoeg zijn zodat alle ontwikkelaars hun passie kwijt kunnen. Naast dat ze aan projecten voor

Bekijk vacature »

PHP Developer

Organisatie Vanaf de buitenkant is het lastig te zien maar in een kantoor in het centrum van Eindhoven gaat een heuse PHP paradijs schuil, aan de `hemelpoort` beneden bij de receptie zit een lieve dame die jou als een Petrus feilloos weet te vertellen welke kant je op moet om het heilige grond te betreden. Eenmaal boven wacht daar een hemelse bak koffie of thee en verwelkom jij je andere 20 teamleden met een goede (vrijdag)morgen. Vandaag is de dag dat jij je bezig gaat houden met 2 verschillende projecten, een hiervan staat in de ochtend centraal en de andere

Bekijk vacature »

Business Intelligence developer

Jij ben niet bang om hard te werken. Uitdagingen zijn welkom. En problemen? Die zijn er om opgelost te worden of, nog beter, om voorkomen te worden! Voor jij aan de slag gaat met het ontwerpen van BI- en DWH-oplossingen, leg je eerst je oor te luister bij de klant. Zo weet jij wat de klant wil, en hoe jouw ontwerp eruit moet komen te zien. Simpel! Althans… met jouw Developer-kwaliteiten wel! Over deze BI vacature Als Business Intelligence Developer ga je zowel op locatie bij de klant aan de slag, als op een van de Sogeti-locaties. Je analyseert de

Bekijk vacature »

Pagina: « vorige 1 2

Thomas van den Heuvel

Thomas van den Heuvel

14/02/2019 00:14:02
Quote Anchor link
Ivo P op 13/02/2019 13:32:45:
ik weet niet wat voor versie van mysqli jij gebruikt, maar met een ? werkt dat daar normaal wel.

http://php.net/manual/en/mysqli-stmt.prepare.php
http://php.net/manual/en/mysqli-stmt.bind-param.php


Mja.
http://fangorn.thijma.nl/images/phphulp/aint-nobody.png

Prepared statements in mysqli zijn "clunky as hell". Met enige discipline ben je beter af met zelf quoten + escapen.
Gewijzigd op 14/02/2019 00:24:33 door Thomas van den Heuvel
 
PHP hulp

PHP hulp

23/04/2019 07:07:35
Honeypot
 
Ozzie PHP

Ozzie PHP

14/02/2019 01:32:05
Quote Anchor link
@Ivo

>> In jouw query kan $id niet iets anders zijn dan een INT, neem jij aan.

Ja, omdat die waarde van een auto increment veld komt en dus niets anders dan een integer kan zijn.

>> En dan missen ook nog de ' ' om $id.

Dat hoeft bij een numerieke waarde toch ook niet?
 
Thomas van den Heuvel

Thomas van den Heuvel

14/02/2019 01:49:48
Quote Anchor link
Okay jongens, nog een keer, heel langzaam vanaf het begin.

Het probleem van het weglaten van quotes als deze "niet nodig zijn" is het volgende:

Elke keer als je een stuk code ziet waarbij dit het geval is zou er een kleine alarmbel af moeten gaan waarbij je denkt: "Hé, hier zijn geen quotes gebruikt, wat is hier aan de hand?". Vervolgens ga je na dat er inderdaad een id gevalideerd wordt, en deze wordt ook niet geaccepteerd (als het goed is) voor opname in de query (laat staan het dan uitvoeren hiervan!) als deze niet van het goede formaat is. Vervolgens concludeer je dat alles okay is.

En dit doe jij, of mogelijk iemand anders, ELKE KEER WEER als je deze code ziet. Je moet je er elke keer van vergewissen dat dit klopt. Dit is je reinste tijdsverspilling.

Het is in ieder geval veel makkelijker (Don't Make Me Think) om ALLE externe data te voorzien van quotes, en gewoon al dit soort data te escapen. Je hoeft er dan NOOIT over na te denken of dit "veilig" is of niet.

Nogmaals, ten overvloede, het gebruik van real_escape_string() zonder quotes is niet veilig (interne link) omdat real_escape_string() niets escaped als er niets te escapen valt.
Gewijzigd op 14/02/2019 01:52:47 door Thomas van den Heuvel
 
Rob Doemaarwat

Rob Doemaarwat

14/02/2019 07:11:51
Quote Anchor link
Eenmalig een wrapper class maken en klaar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
//bar wordt ook echt null, en niet ''
$db->execute('update tabelnaam set foo = :foo, bar = :bar where id = :id',['foo' => 5,'bar' => null,'id' => 5]);

//en voor recht-toe-recht-aan werk nog korter
$db->update('tablenaam',['foo' => 5,'bar' => null],['id' => 5]);

Nooit meer na hoeven te denken over quotes, nooit meer na hoeven te denken over escapen.
 
Ozzie PHP

Ozzie PHP

14/02/2019 10:49:59
Quote Anchor link
@Thomas

>> Het is in ieder geval veel makkelijker (Don't Make Me Think) om ALLE externe data te voorzien van quotes

Ik meen ergens gelezen te hebben in de documentatie van MySQL dat het niet wordt aangeraden om een getal (bijvoorbeeld een ID) te quoten. Hoe zit dat dan?
 
- Ariën -
Beheerder

- Ariën -

14/02/2019 11:13:41
Quote Anchor link
Hm... Als ik dus dit doe:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE tpb SET getal = 1

dan is er toch geen externe data?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE tpb SET getal = '".$_GET['something']."'

Deze is juist extern, en behoort sowieso van single-quotes te worden voorzien.
Én natuurlijk van de real_escape_string functionaliteit!!
Gewijzigd op 14/02/2019 11:14:26 door - Ariën -
 
Ivo P

Ivo P

14/02/2019 11:43:29
Quote Anchor link
als je SET getal = 1 doet, is het inderdaad overbodig.

maar zodra het wordt

$teller = 10;
...SET getal = $teller

vervallen we weer in het varhaal van Thomas: je moet weer terug kijken om te zien dat $teller inderdaad gevalideerd is.

Je 2e vraag met $_GET is heel duidelijk, maar elke andere variabele kán ook rare data bevatten.

Zo heb ik ooit een bug moeten zoeken waarom een van de medewerkers nooit een keuringsrapport kon opslaan en alle collega's wel.

Uiteindelijk bleek het probleem te zijn
UPDATE ..... SET medewerker = '$naam' .....

En helaas: zijn naam bevatte een '
Volkomen legitieme data, maar liet wel een query mislukken. En die naam kwam gewoon uit de database onder zijn user-gegevens (waarom niet volstaan kon worden met zijn user-id is weer een andere vraag.)
 
Ozzie PHP

Ozzie PHP

14/02/2019 12:39:11
Quote Anchor link
Maar ik meen dus ergens gelezen te hebben in de officiële documentatie dat je een getal niet behoort te quoten en dat dat werd afgeraden. Dus ik weet t nu ook niet.
 
Thomas van den Heuvel

Thomas van den Heuvel

14/02/2019 17:19:52
Quote Anchor link
Bron?

En dit boeit echt niets of heel weinig. Althans niet voor MySQL.

Alleen wanneer je prepared statements gebruikt in MySQLi maak je gebruik van het zogenaamde "binaire protocol" waarbij er iets met types gedaan wordt, anders zijn het toch allemaal strings.

Hetzelfde geldt voor PDO, als je daar de emulatie van prepared statements niet uitzet zet PDO ook doodleuk overal quotes omheen en negeert deze de typehints als je values bind(t). En je moet de logs induiken om dit na te gaan, omdat je op geen enkele andere manier kunt zien welke concrete SQL-code nu daadwerkelijk aan je database wordt gevoerd.

Daarbij, dit is wederom een tradeoff: mogelijk lever je een heel klein beetje performancewinst in voor een eenvoudige en eenduidige werkwijze die altijd veilig is.

Of je bouwt een wrapper zoals @Rob voorstelt. Maar zelfs dan. Stuur je dan altijd eerst SQL-templates naar de database met een prepare(), zelfs als het SELECT-queries betreft? Ik zie best mogelijkheden om een mooie wrapper te bouwen, maar dat is in zekere zin allemaal abstractie en de vraag is dan wat voor meerwaarde dat heeft? Boven een rechttoe-rechtaan-aanpak in MySQLi?

En het wordt natuurlijk weer anders als je een echte database abstractie laag maakt (waar het tweede fragment van @Rob op zinspeelt?) maar ook daar zul je je moeten afvragen of die abstractie echt nodig is en zich ooit terugverdient.

Deze hele discussie is ook gewoon "backwards" omdat we het de hele tijd hebben over "het beste gereedschap" zonder hier een concrecte "klus" in te betrekken. Het laatste bepaalt het eerste, niet andersom...
Gewijzigd op 14/02/2019 17:53:23 door Thomas van den Heuvel
 
Ozzie PHP

Ozzie PHP

14/02/2019 17:58:49
Quote Anchor link
>> Bron?

Ja, als ik dat nog had kunnen terugvinden had ik het er uiteraard bij gezet.

In ieder geval wel stof tot nadenken.

>> mogelijk lever je een heel klein beetje performancewinst in voor een eenvoudige en eenduidige werkwijze die altijd veilig is.

Ja, dat stukje performancewinst boeit me niet eerlijk gezegd. Het stond er alsof het niet goed was om een getal te quoten.

Voor de rest met je eens hoor. Wat ik me wel afvraag ... ga je bijv. een id in een query dan nog escapen? Of zorg je ervoor dat je vantevoren die id al hebt gevalideerd? Wat is het beste? Eerst controleren of het een nummer is én dan ook nog escapen lijkt me overdreven?
 
Thomas van den Heuvel

Thomas van den Heuvel

14/02/2019 18:15:35
Quote Anchor link
> Eerst controleren of het een nummer is én dan ook nog escapen lijkt me overdreven?
Nee dat is niet overdreven. Je wilt geen enkele ruimte aan het toeval overlaten.

Je escaped dan dus nog steeds omdat je anders weer in de eerdere situatie terecht komt waarbij je niet weet of de quotes bewust zijn weggelaten of toch per ongeluk zijn vergeten. Je wilt hier niet elke keer weer over nadenken.

Je komt dan ook elke keer weer in een programmeerspagaat. Wel of geen quotes aanbrengen? Gewoon niet doen :p. Behandel alle externe data gewoon hetzelfde, is een stuk makkelijker.

Quoten + escapen en klaar.

En indien invoer in eerste instantie niet voldoet de query niet eens uitvoeren omdat dat zelden tot nooit een zinnig resultaat oplevert.
Gewijzigd op 14/02/2019 18:18:09 door Thomas van den Heuvel
 
Rob Doemaarwat

Rob Doemaarwat

14/02/2019 20:21:13
Quote Anchor link
Thomas van den Heuvel op 14/02/2019 17:19:52:
... echte database abstractie laag ... maar ook daar zul je je moeten afvragen of die abstractie echt nodig is en zich ooit terugverdient.

Zelf heb ik het idee dat ik er sneller door kan werken omdat ik minder code hoef te schrijven. Niet steeds die standaard stukken SQL, minder kans op fouten. Maar ook minder PHP omdat een groot deel van de afhandeling - lijstjes - er al in zit. Daarnaast loop je gewoon veel meer risico op een "misser" als je steeds handmatig moet escapen, en dat kan een *dure* grap worden.
 
Ozzie PHP

Ozzie PHP

14/02/2019 20:35:58
Quote Anchor link
@Thomas

Voor de duidelijkheid, dan wordt het dus bijv. zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$sql
= "SELECT '" . $conn->real_escape_string($foo) . "' FROM bar WHERE id = '" . $conn->real_escape_string($id) . "'";

?>


Correct?
 
Thomas van den Heuvel

Thomas van den Heuvel

14/02/2019 23:23:19
Quote Anchor link
> Daarnaast loop je gewoon veel meer risico op een "misser" als je steeds handmatig moet escapen, en dat kan een *dure* grap worden.
Sure, zoals ik al zei, je moet enige discipline hebben. Bij elk stuk data moet de realisatie zijn waar deze vandaan komt en hoe je deze zou moeten behandelen. Escaping hoort daar eigenlijk altijd bij (filter input, escape output). Uitzonderingen daarop zijn ook echt uitzonderingen.

> Correct?
Euh, $foo (kolomnaam?) waarom zou je dat dynamisch willen maken? Kolomnamen staan ook niet tussen quotes. Ik zou daar misschien een whitelist voor gebruiken ofzo. Voor $id lijkt het mij in orde. Quoten en escapen gaat bijna altijd over waarden, niet zozeer over kolomnamen, die liggen meestal vast.
 
Ozzie PHP

Ozzie PHP

15/02/2019 00:07:48
Quote Anchor link
>> Euh, $foo (kolomnaam?) waarom zou je dat dynamisch willen maken?

Pffff, ik lag blijkbaar te slapen. Haha, dat sloeg inderdaad totaal nergens op.
 
Ward van der Put
Moderator

Ward van der Put

15/02/2019 09:21:37
Quote Anchor link
Thomas van den Heuvel op 14/02/2019 23:23:19:
Euh, $foo (kolomnaam?) waarom zou je dat dynamisch willen maken? Kolomnamen staan ook niet tussen quotes.


Als je één (abstract) class wilt kunnen gebruiken voor verschillende tabellen, dan zijn dynamische kolomnamen onmisbaar. Dat kan overigens ook een constante zijn in plaats van een variabele:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
public function create(array $keyed_data)
{

    $columns = array_keys($keyed_data);
    $sql = 'INSERT INTO ' . static::TABLE_NAME . ' (' . implode(', ', $columns) . ') VALUES (:' . implode(', :', $columns) . ')';

    // etc.
}
?>


Hier zijn zowel de tabelnaam als alle kolomnamen dynamisch.
 
Ozzie PHP

Ozzie PHP

15/02/2019 10:42:06
Quote Anchor link
Ah ja, oké ... dan werk je dus niet echt met queries maar met aparte functies om bijv. iets te inserten of updaten en als parameters geef je dan de kolomnaam en argumenten mee aan de functie. Dat kan inderdaad ook.
 

Pagina: « vorige 1 2



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.