PDO en Mysql injectie
Kees Schepers op 13/01/2011 21:16:20:
Ik zie ook sommige actieve gebruikers hier die zich rot irriteren aan onwetende nieuwe programmeurs die nog niet goed wegwijs zijn in het vinden van oorzaken of oplossen van problemen.
Dit zie je dan verkeerd. Hier op het forum willen we iedereen helpen. Maar als een topic starter een post maakt van 'Ik heb een fout dit is de code' dan word ik (en vele met mij) daar geïrriteerd van.
Als zo'n persoon vervolgens wijs gaat doen dat wij allemaal slecht zijn en hij het beter weet wekt natuurlijk nog meer irritatie op.
Dit geld ook voor topics waarvan de vragen direct op google zijn te vinden.
Kees Schepers op 13/01/2011 21:16:20:
Ik zelf irriteer me vooral weer dus aan deze mensen die reageren 'Kijk maar op php.net'. Tuurlijk verwijzen naar een bron is altijd goed maar geef ook meteen een nuttig antwoord op iemand zijn vraag waar je iemand mee helpt.
Er gebeurd hier nooit dat iemand alleen een link php.net geeft. Hij/zij stuurt de TS altijd naar de goede pagina, vaak met wat tekst voor en na de link er ook nog bij. Dit slaat dus nergens op.
Kees Schepers op 13/01/2011 21:16:20:
Ik denk dat 80% van de 'ervaren' programmeurs hier zelf ook zo begonnen zijn met 'noob' vragen.
Ja, dit klopt. Maar leren die 'onervaren' mensen dan meer als je ze gelijk geeft en heel aardig en lief gaat praten? Dat maak je mij niet wijs! En leren die mensen meer als ze zelf zoeken of dat wij hier de code voor hun gaan scripten. Wij zijn hier geen gratis webdevelopers!
Kees Schepers op 13/01/2011 21:16:20:
Als je geirriteerd bent reageer dan gewoon niet. Als je vind dat iemand lui is reageer dan gewoon niet. Je bent hier om kennis te delen en niet gal te spugen lijkt me :)
Waarom reageer jij dan? Want jij bent nu geïrriteerd, dus moet je niet reageren.
Maar goed. Meneer de goede forum bezoeker. U weet precies hoe het moet en u bent een voorbeeld voor de hele wereld! Ga zo door!
Wouter J op 13/01/2011 21:54:48:
Er gebeurd hier nooit dat iemand alleen een link php.net geeft. Hij/zij stuurt de TS altijd naar de goede pagina, vaak met wat tekst voor en na de link er ook nog bij. Dit slaat dus nergens op.
Kees Schepers op 13/01/2011 21:16:20:
Ik zelf irriteer me vooral weer dus aan deze mensen die reageren 'Kijk maar op php.net'. Tuurlijk verwijzen naar een bron is altijd goed maar geef ook meteen een nuttig antwoord op iemand zijn vraag waar je iemand mee helpt.
Er gebeurd hier nooit dat iemand alleen een link php.net geeft. Hij/zij stuurt de TS altijd naar de goede pagina, vaak met wat tekst voor en na de link er ook nog bij. Dit slaat dus nergens op.
Doe ik wel. Heel veel antwoorden zijn zo op php / mysql site te vinden. Maar goed, veel vragen kunnen ook gewoon beantwoord worden door een bepaalde pagina op php.net te lezen (ik link dus altijd wel naar een bepaalde pagina).
Alleen jammer dat deze PDO-functie niet door alle shared hosts wordt ondersteund (Mijndomein.nl onder andere). Lastig dus. Het is nogal omslachtig om alle communicatie met de database via prepared statements te laten lopen. En aangezien mysql_real_escape_string in PDO niet werkt zul je dus zelf een functie moet maken om de data om te zetten naar een veilige string.
En wederom kijk je dan op php.net en zie je:
Just a little function which mimics the original mysql_real_escape_string but which doesn't need an active mysql connection. Could be implemented as a static function in a database class. Hope it helps someone.
Code (php)
Gewijzigd op 13/01/2011 22:24:36 door The Ultimate
Wouter J op 13/01/2011 21:54:48:
Dit zie je dan verkeerd. Hier op het forum willen we iedereen helpen. Maar als een topic starter een post maakt van 'Ik heb een fout dit is de code' dan word ik (en vele met mij) daar geïrriteerd van.
Als zo'n persoon vervolgens wijs gaat doen dat wij allemaal slecht zijn en hij het beter weet wekt natuurlijk nog meer irritatie op.
Dit geld ook voor topics waarvan de vragen direct op google zijn te vinden.
Als zo'n persoon vervolgens wijs gaat doen dat wij allemaal slecht zijn en hij het beter weet wekt natuurlijk nog meer irritatie op.
Dit geld ook voor topics waarvan de vragen direct op google zijn te vinden.
Ik zie wat ik lees op mijn scherm, maar wellicht vind je mijn interpretatie verkeerd. En dat mag natuurlijk. Het voorbeeld wat je geeft vind ik geen goed voorbeeld om in mijn ogen terecht geïrriteerd te zijn. Je bent waarschijnlijk dan geïrriteerd omdat je dezelfde vraag in dezelfde structuur dagelijks terug ziet komen. Maar dan ligt alsnog de oorzaak bij je zelf en niet degene die post.
Niet iedereen heeft hetzelfde inzicht als jij of een andere ervaren programmeur. Bij mijn bedrijf is een tijd terug ook een nieuwe programmeur erbij gekomen, en die maakt dan fouten waarvan je bij jezelf denkt hoe kun je zo'n fout maken of dit is toch zo te vinden maar toch kan je dat diegene niet kwalijk nemen dat komt omdat je zelf een beter ontwikkeld inzicht hebt en je weet welke bronnen je moet raadplegen om je antwoord te krijgen.
Tuurlijk als jij zo iemand advies probeert te geven terwijl de TS erom gevraagd heeft dan is het in mijn ogen wel terecht dat je dat vervelend vind. Voor mij zou dat alsnog geen reden zijn om te reageren maar dat is iedereen voor zichzelf.
Wouter J op 13/01/2011 21:54:48:
Er gebeurd hier nooit dat iemand alleen een link php.net geeft. Hij/zij stuurt de TS altijd naar de goede pagina, vaak met wat tekst voor en na de link er ook nog bij. Dit slaat dus nergens op.
Nou goed, onder jou is al 1 iemand die het toegeeft. Ik ben het met je eens als je naar een bron verwijst en specifiek wijst naar een gedeelte van die bron met tekst en uitleg het duidelijk is (of zou moeten zijn) voor degene die met de vraag zit.
Wouter J op 13/01/2011 21:54:48:
Ja, dit klopt. Maar leren die 'onervaren' mensen dan meer als je ze gelijk geeft en heel aardig en lief gaat praten? Dat maak je mij niet wijs! En leren die mensen meer als ze zelf zoeken of dat wij hier de code voor hun gaan scripten. Wij zijn hier geen gratis webdevelopers!
Als je lief tegen ze praat leren ze niks van, maar maakt het er zeker niet ongezelliger van. Wie weet voelt zo'n lid zich hier dan wel thuis en komt hij vaker terug en later ook om anderen te helpen ? ;-) Als je geen gratis advies wilt geven dan ben je imo al niet op het juiste plek hier want daar is deze site wel voor bedoeld lijkt mij.
Wouter J op 13/01/2011 21:54:48:
Waarom reageer jij dan? Want jij bent nu geïrriteerd, dus moet je niet reageren.
Maar goed. Meneer de goede forum bezoeker. U weet precies hoe het moet en u bent een voorbeeld voor de hele wereld! Ga zo door!
Maar goed. Meneer de goede forum bezoeker. U weet precies hoe het moet en u bent een voorbeeld voor de hele wereld! Ga zo door!
Ben helemaal niet geïrriteerd hoor, ik constateer en probeer alleen maar bij te dragen in een beter forum met meer inhoud. Ik richt het aan niemand persoonlijk verder, wou alleen dit kwijt. Dat jij het blijkbaar wel persoonlijk opvat is vreemd of veelzeggend. Of ik had moeten reageren of niet daar valt inderdaad over te twisten, want de vraag van de TS word er niet mee beantwoord.
The Ultimate op 13/01/2011 22:19:20:
(...)
Het is nogal omslachtig om alle communicatie met de database via prepared statements te laten lopen. (...)
Het is nogal omslachtig om alle communicatie met de database via prepared statements te laten lopen. (...)
Waarom vind je het dan omslachtig? Het is echt een verademing wat je allemaal met PDO kan doen.
The Ultimate op 13/01/2011 22:19:20:
En wederom kijk je dan op php.net en zie je:(...)
Zou mooi zijn geweest als je een linkie naar die desbetreffende comment had geplaatst.
Kees Schepers op 13/01/2011 22:31:49:
Nou goed, onder jou is al 1 iemand die het toegeeft. Ik ben het met je eens als je naar een bron verwijst en specifiek wijst naar een gedeelte van die bron met tekst en uitleg het duidelijk is (of zou moeten zijn) voor degene die met de vraag zit.
Wouter J op 13/01/2011 21:54:48:
Er gebeurd hier nooit dat iemand alleen een link php.net geeft. Hij/zij stuurt de TS altijd naar de goede pagina, vaak met wat tekst voor en na de link er ook nog bij. Dit slaat dus nergens op.
Nou goed, onder jou is al 1 iemand die het toegeeft. Ik ben het met je eens als je naar een bron verwijst en specifiek wijst naar een gedeelte van die bron met tekst en uitleg het duidelijk is (of zou moeten zijn) voor degene die met de vraag zit.
Ik vind het echt heel erg dat men zelf niet meer die links kunnen vinden. Alle informatie is zo voor het oprapen. Dat was dus ook zo in dit topic.
Karl Karl op 13/01/2011 23:13:21:
Waarom vind je het dan omslachtig? Het is echt een verademing wat je allemaal met PDO kan doen.
Met PDO zeker. Helemaal mee eens. Maar handel jij alles (en dan bedoel ik ook ALLES) af via prepared statements? Bij mij werkt de functie PDO::quote() namelijk niet dus ik ben op zoek naar een oplossing. Of de functie die op php.net staat of alles via prepared statements. Graag hoor ik jouw gedachte daarover!?The Ultimate op 13/01/2011 22:19:20:
(...)
Het is nogal omslachtig om alle communicatie met de database via prepared statements te laten lopen. (...)
Het is nogal omslachtig om alle communicatie met de database via prepared statements te laten lopen. (...)
Waarom vind je het dan omslachtig? Het is echt een verademing wat je allemaal met PDO kan doen.
Karl Karl op 13/01/2011 23:13:21:
Ik heb inmiddels de relevante code in mijn reactie hierboven toegevoegd.The Ultimate op 13/01/2011 22:19:20:
Zou mooi zijn geweest als je een linkie naar die desbetreffende comment had geplaatst.En wederom kijk je dan op php.net en zie je:(...)
Ik gebruik het zelf voor gegenereerde queries (want die zijn soms een headache met prepared statements, dit is de easy way out) en daar werkt het bij mij prima. Voor de rest: prepared statements, SQL en data gescheiden houden. Mij bevalt het prima. En natuurlijk als je een query zonder variabelen hebt, dan gewoon PDO::query. Beiden geven een PDOStatement terug, dus ze afwisselen in gebruik is geen enkel probleem.
Jelmer rrrr op 14/01/2011 08:51:12:
Ik heb een kleine test gedaan maar zie nu dat PDO::quote toch gewoon werkt. Vreemd want een tijdje terug lukte het mij niet en kreeg ik telkens een error melding. Wellicht is dat dan op USBwebserver geweest? Weet het niet meer precies. Kan dus helaas ook geen code laten zien die een error geeft. :-(De SQLite en MySQL drivers implementeren beiden PDO::quote volgens mij (althans, ik ben nog nooit een host tegengekomen waarbij ze niet werkten, ik gebruik PDO al redelijk lang, en het lijkt me sterk dat dit per versie van PHP verschilt) Hoe werkt hij bij jou niet? Heb je een stukje code dat niet werkt?
Bedankt overigens voor de heldere toelichting. Ik zie op php.net nu ook dat ze het gebruik van prepared statements inderdaad aanraden boven het gebruik van PDO::quote. Dan sla ik gewoon ook die weg in.
Misschien een stomme vraag maar wanneer kun je gebruik maken van PDO::query en wanneer van PDO->query, althans wat is het verschil tussen de dubbele dubbele punten en het 'pijltje'??
EDIT (to self):
The double colon's allow you to reference a function of a class without actually creating an instance of the class. The syntax is:
classname::functioname();
Note, however, that if any references in the function are made to $this, the call will fail--you will need to create an instance of the class to use the function. Hope that helps.
Gewijzigd op 14/01/2011 09:40:14 door The Ultimate
@gezeik boven me: wat boeit het dat-ie de vraag op 2 sites stelt? Sinds wanneer mag dat niet?
Gewijzigd op 14/01/2011 12:24:35 door toby hinloopen
Dikke discussie... :o :)
Een account hebben op een andere website dan PHPHulp of een vraag ook op een ander forum posten is niet tegen de gebruikersvoorwaarden van PHPHulp.