Simpele vraag over Queries en PHP - Formuleren
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)
1
2
3
4
2
3
4
<?php
$query1 = "Select * from personen where id=".$_GET['id'];
$query2 = "Select * from personenen where naam=\"".$_GET['naam']."\"";
?>
$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)
1
2
3
4
2
3
4
<?php
$query1 = 'Select * from personen where id='.$_GET['id'];
$query2 = 'Select * from personenen where naam="'.$_GET['naam'].'"';
?>
$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)
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.
Dan zou ik wel hoofdletters gebruiken en goede quotes.
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?)
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:
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:
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
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)
1
2
3
4
2
3
4
<?php
$query1 = 'Select * from personen where id='.$_GET['id'];
$query2 = 'Select * from personenen where naam="'.$_GET['naam'].'"';
?>
$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).