Simpele vraag over Queries en PHP - Formuleren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Kevin Ellen

Kevin Ellen

12/07/2011 10:54:34
Quote Anchor link
Hallo,

Je kunt een quory op verschillende manieren aangeven in PHP; maar wat is de beste manier? Hieronder staan een paar voorbeelden met mijn idee-en erover. Zou men mij kunnen toelichten of ik het goed doe? Of niet..? En zo niet, wat doe ik dan waarom fout?
-Sorry voor mijn roestige Nederlands overigs, ik schrijf het niet zo vaak ;)

gegeven url:
index.php?id=564&naam=Klaas

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$query1
= "Select * from personen where id=".$_GET['id'];
$query2 = "Select * from personenen where naam=\"".$_GET['naam']."\"";
?>

Zoals je al ziet, moet ik bij query2 gaan escapen omdat ik -"- gebruik. Normaal gebruik ik het volgende, is dat gewoon goed?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$query1
= 'Select * from personen where id='.$_GET['id'];
$query2 = 'Select * from personenen where naam="'.$_GET['naam'].'"';
?>


(Ja ik weet het, zou ze moeten real escapen voor injecties; maar dit is alleen maar een voorbeeld; zo blijft het iets duidelijker. het agat hier om de quotes en hoe je het formuleert)
 
PHP hulp

PHP hulp

23/04/2024 16:51:39
 
Rolf -

Rolf -

12/07/2011 10:59:45
Quote Anchor link
Zelf zou ik nooit de wildcard (*) gebruiken om iets te selecteren. Je hebt vast niet alle info nodig die in je tabel staat. Verder zou ik in het tweede voorbeeld de " en de ' omdraaien. Dan is hij volgens mij gewoon goed.
 
- Ariën  -
Beheerder

- Ariën -

12/07/2011 11:00:47
Quote Anchor link
Code-blok 2, $query2

Dan zou ik wel hoofdletters gebruiken en goede quotes.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query2
= "SELECT id, dit, dat, zus, zo FROM personenen WHERE naam='".$_GET['naam']."'";
?>
 
Kevin Ellen

Kevin Ellen

12/07/2011 11:09:29
Quote Anchor link
Hoofdletters heb ik zelf nooit gebruikt; volgens mij is SQL ook niet hoofdletter gevoelig. En wildcard gebruik ik soms als iemand inlogd en dus een class aanmaakt; maar dat zou in deze query dus niet zo zijn. (Dan kan ik per direct alles uit 1 query trekken).

Maar -Aar-, wat is dan het verschil tussen het gebruik van -'- en -"-? Ik heb juist geleerd met SQL dat je -"- moet gebruiken voor strings; vandaar dat ik in blok2,Q2 dit ook heb gedaan. En ik weet dat PHP een string tussen -'- kan lezen.

Is dit misschien een geval van persoonlijke preferentie, wat geen invloed heeft op de snelheid/functionaliteit van de code zelf? Of..?

(ik gebruik -"- eigenlijk nooit met strings in PHP; altijd -'-, dat is toch prima?)
 
Wouter J

Wouter J

12/07/2011 11:33:03
Quote Anchor link
@Kevin, enkele quotes zijn sneller dan dubbele. En waarom je het 1 of het ander gebruikt probeer ik hier even uit te leggen:
Stel je wilt <div id="box"></div> echoën op een pagina. Dan zie je dat er in de string dubbele quotes staan, zodra je dan om de string enkele quotes gebruikt krijg je geen fouten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<div id="box"></div>';
?>

Als we dubbele gebruiken zal PHP hier denken huh eindigt die string hier al? Wat zijn dan die andere tekens?

Maar zodra we bijv. de string "dit is z'n voorbeeld" willen gebruiken gebruiken we dubbele quotes, omdat er in de string enkele quotes staan.
Daarnaast is het zo dat dubbele quotes ook nog variabelen parsed (Wat je niet moet gebruiken) en je kan er wat andere dingen meedoen. Zie ook http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double


Nu even terug komen op het voorbeeld met SQL. Zodra we bij where een string invoegen moet je dit ook tussen enkele quotes zetten, zoals in PHP. Daarom gebruik je voor SQL vaak dubbele quotes.

Als SQL met hoofdletters schrijft is het wat duidelijker wat SQL functies zijn en wat tekst is. Je maakt je query daarmee dus overzichtelijker.
Het escapen van quotes moet je altijd vermeiden.
En wat ik hierboven zei als $_GET['naam'] een string is moet je quotes eromheen zetten en als het een interger (cijfer) is moet je er geen quotes omheen zetten.
En het 3e voorbeeld van jou snap ik niet echt. Waarom zou je een string niet afsluiten? In PHP doe je toch ook niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$string
= 'hallo
?>


De enige juiste en correcte methode is dus je laatste. (tenzij $_GET['naam'] een getal is)
Gewijzigd op 12/07/2011 11:33:28 door Wouter J
 
Kevin Ellen

Kevin Ellen

12/07/2011 11:45:23
Quote Anchor link
Wouter, dankjewel. Je zegt dus precies wat ik dacht en dat stelt me gerust.

Wanneer SQL al weet dat 'id' een integer is (waarschijnlijk zelfs AI, maar dat doetternietaantoe), dan is de string zelf al afgesloten en komt er alleen een nummer achter.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$query1
= 'Select * from personen where id='.$_GET['id'];
$query2 = 'Select * from personenen where naam="'.$_GET['naam'].'"';
?>

Dat is dus ook het verschil in bovenstaande voorbeeld. Naam is een string, dus die moet ook in SQL nog worden afgesloten; waar ik vanuit ging dat 'id' alleen een int kan zijn (had ik wel mogen vermelden inderdaad). Daarom dat ik die niet nog een keer open en afsluit (want er is voor de SQL niets meer af te sluiten.

Maar ik ben blij dat al mijn SQL dus tussen de goede quotes staan! Dankjewel!

(en de hoofdletters, ik weet dat het overzichtelijker kan zijn; maar ik maak mijn queries altijd extern buiten php en etst deze eerst; voordat ik ze in PHP zet. Vind ik zelf nog makkelijker... en persoonlijk, dat ben ik dus, wordt ik gek van hoofdsletters).
 



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.