string in query printen.
Wat is de beste manier om een string in een query te printen?
Beide manieren werken maar wat is nou het beste en wat is het verschil?
Manier 1:
Manier 2:
Beide manieren werken maar wat is nou het beste en wat is het verschil?
Manier 1:
Manier 2:
Gewijzigd op 12/03/2018 15:45:23 door Jasper Schellekens
De beste manier is om variabelen buiten quotes te houden, en dus manier 1. Er is sprake van twee soorten datatypes: een string en een variabele.
Het is ten eerste ook logischer, en verder worden $vars sowieso niet geparsed tussen single-quotes en wel tussen dubbel-quotes.
Het is ten eerste ook logischer, en verder worden $vars sowieso niet geparsed tussen single-quotes en wel tussen dubbel-quotes.
Ik vind de tweede manier de beste, want dan vervuil je je code niet met een brij van allemaal enkele quotes, dubbele quotes en punten. Vooral wanneer je een string hebt met een heleboel variabelen maak je op de eerste manier je code vrijwel onleesbaar.
Toevoeging op 12/03/2018 16:17:04:
Overigens zijn er nog meerdere manieren om je strings samen te stellen:
of, zeker bij grote queries mijn favoriet, met een heredoc:
Maar eigenlijk moet je vanwege de kans op SQL injection helemaal geen strings in queries printen en in plaats daarvan gebruik maken van prepared statements en placeholders.
Toevoeging op 12/03/2018 16:17:04:
Overigens zijn er nog meerdere manieren om je strings samen te stellen:
of, zeker bij grote queries mijn favoriet, met een heredoc:
Maar eigenlijk moet je vanwege de kans op SQL injection helemaal geen strings in queries printen en in plaats daarvan gebruik maken van prepared statements en placeholders.
Gewijzigd op 12/03/2018 16:20:49 door Willem vp
Willem vp op 12/03/2018 16:09:55:
Ik vind de tweede manier de beste, want dan vervuil je je code niet met een brij van allemaal enkele quotes, dubbele quotes en punten. Vooral wanneer je een string hebt met een heleboel variabelen maak je op de eerste manier je code vrijwel onleesbaar.
Ieder zijn manier. Maar met een beetje editor zie je wel het verschil tussen variabelen en strings.
Ook heb ik bijvoorbeeld gemerkt dat manier 2 niet eens werkt als bijv een input value. Ik heb bijv een pagina exact hetzelfde als de profiel pagina om het profiel aan te passen. Alleen waar bepaalde gegevens staan, is er een input veld. De bestaande input moet ik dan ophalen door de variabel buiten de quotes te houden. Als ik dat niet doe print hij bijvoorbeeld gewoon $var inplaats van de data die de var vasthoud;
Dat klopt...
- Ariën - op 12/03/2018 16:00:17:
en verder worden $vars sowieso niet geparsed tussen single-quotes en wel tussen dubbel-quotes.
Manier #3, waarbij je je ook bedient van een escape-functie, ten einde SQL-injectie te voorkomen.
Op eenzelfde wijze heb je zoiets nodig in HTML, om karakters die een speciale betekenis hebben in HTML te escapen (denk aan htmlspecialchars()).
Op eenzelfde wijze heb je zoiets nodig in HTML, om karakters die een speciale betekenis hebben in HTML te escapen (denk aan htmlspecialchars()).
Mijn voorkeur gaat uit naar prepared statements. Volgens mij ben je daarmee niet alleen van dit probleem verlost maar ook van het risico op sql-injection.
Pipo Clown op 12/03/2018 19:24:53:
Mijn voorkeur gaat uit naar prepared statements. Volgens mij ben je daarmee niet alleen van dit probleem verlost maar ook van het risico op sql-injection.
Een verkeerd gebruik van welke methode dan ook is meestal niet veilig. Het lijkt mij onverstandig om je veilig te wanen simpelweg omdat je gebruik maakt van aanpak X.
Je moet te allen tijde snappen wat je doet. Ik heb vaak zat mensen gezien die vrolijk strings aan de SQL van hun prepared statement aan het rijgen waren... Want prepared statements waren toch veilig?
Aan het einde van de dag maakt het niet uit wat je gebruikt zolang je maar snapt waarom iets veilig is of waarom je doet wat je doet. Als je geen motivatie voor een werkwijze hebt (wat meestal neerkomt op niet snappen wat je doet maar het volgen van een apetruuk omdat je dat zo geleerd hebt) is deze per definitie ongeschikt.
Gewijzigd op 12/03/2018 22:37:16 door Thomas van den Heuvel




