string in query printen.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jasper Schellekens

Jasper Schellekens

12/03/2018 15:44:37
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM TABLE WHERE FIELD ='".$string."'


Manier 2:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM TABLE WHERE FIELD ='$string'
Gewijzigd op 12/03/2018 15:45:23 door Jasper Schellekens
 
PHP hulp

PHP hulp

30/11/2021 03:12:17
 
- Ariën -
Beheerder

- Ariën -

12/03/2018 16:00:17
Quote Anchor link
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.
 
Willem vp

Willem vp

12/03/2018 16:09:55
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$query = sprintf("SELECT * FROM TABLE WHERE FIELD='%s'", $string);

of, zeker bij grote queries mijn favoriet, met een heredoc:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$query = <<<"END_SQL"
   SELECT *
     FROM TABLE
    WHERE FIELD = '$string'
END_SQL;

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
 
- Ariën -
Beheerder

- Ariën -

12/03/2018 16:24:53
Quote Anchor link
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.
 
Jasper Schellekens

Jasper Schellekens

12/03/2018 16:35:55
Quote Anchor link
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;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input class="input100" type="text" name="NAME" value="'.$name.'">
 
- Ariën -
Beheerder

- Ariën -

12/03/2018 16:44:55
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

12/03/2018 17:23:40
Quote Anchor link
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()).
 
Pipo Clown

Pipo Clown

12/03/2018 19:24:53
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

12/03/2018 22:36:15
Quote Anchor link
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
 



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.