Gå til innhold

[Løst]"riktig" syntaks på mysql spørringer..


Anbefalte innlegg

Eksempelvis denne spørringen:

SELECT P.pumpeid, P.merke, P.modell, P.kundeid, P.nesteservice, P.installasjonsdato, K.fornavn, K.etternavn, K.postnr, K.poststed, K.telefon2, K.telefon1, K.serviceavtale FROM Pumper as P, Kunder as K WHERE P.kundeid = K.kundeid ORDER BY P.nesteservice

 

Er det mer riktig å bruke

`P`.`pumpeid`

på alle..?

 

Og denne biten:

 

... WHERE `Pumper`.`pumpeid` = '{$pumpeid}' LIMIT 1;

 

Er det mer riktig å skrive '' og {} rundt variabelen slik jeg har gjort? Det virker uten og..

 

Bruker dere "ekstrautstyr" som f.eks.

mysql_free_result($result);

 

Hva annet må/bør være med..?

Lenke til kommentar
Videoannonse
Annonse

Spørsmålet er om det er som du skriver «mysql»-spørringer eller om det er SQL-spørringer. SQL har en standardisert syntaks som de fleste databaser støtter. Men MySQL støtter både utvidelser og forenklinger av SQL.

Det dette koker ned til er gjerne om spørringene noen gang skal kjøres mot annet enn en MySQL-server. Dersom svaret er ja bør f.eks ` brukes rundt database-/tabellnavn. Dersom svaret er nei syntes jeg personlig at den enkleste syntaksen MySQL støtter er det beste valget da enkel syntaks ofte er lettere å lese samt har mindre muligheter for feil.

 

Så jeg hadde skrevet slik du skriver i første kodeblokk.

 

Men her kan jeg legge til at SQL-kode for min del ikke er noe hellig som skal skrives én gang, lamineres og legges i banken. Refaktorering skjer over en lav sko.

 

--------

 

Når det gjelder «{$pumpeid}» er det PHP, ikke SQL. Jeg anbefaler å alltid bruke krølleparanteser rundt variabler i parsede SQL-spørringer ("" rundt spørringen i motsetning til ''). Begrunnelsen er at det gir etter min erfaring mer nøyaktig highlighting i editorer samt gir deg mulighet til å bruke arrays/objekter (jeg er 90% sikker på at det ikke fungerer uten parantesene) som:

.. WHERE name = '{$fisk->name}' LIMIT 9000

.. WHERE name = '{$fisk['name']}' LIMIT 9000

Consistency is everything, bruker du krølleparanteser rundt arrays/objects i spørringer bør du IMO også gjøre det rundt andre variabler.

Lenke til kommentar
Spørsmålet er om det er som du skriver «mysql»-spørringer eller om det er SQL-spørringer. SQL har en standardisert syntaks som de fleste databaser støtter. Men MySQL støtter både utvidelser og forenklinger av SQL.

Det dette koker ned til er gjerne om spørringene noen gang skal kjøres mot annet enn en MySQL-server. Dersom svaret er ja bør f.eks ` brukes rundt database-/tabellnavn. Dersom svaret er nei syntes jeg personlig at den enkleste syntaksen MySQL støtter er det beste valget da enkel syntaks ofte er lettere å lese samt har mindre muligheter for feil.

Såvidt jeg husker er ` mysql-spesifikk syntaks, og bør etter min mening unngå så langt det er mulig av den grunn. I forhold til andre databasesystemer skal det være helt uproblematisk å liste opp både tabell- og kolonnenavn uten noe som helst form for aksent eller apostrof så lenge man holder seg unna fy-ord i SQL-sammenheng (noen vil være spesifikk for databasesystemet også). Det er f.eks ingen genial ide å ha en tabell eller kolonne med navn from. Skulle man allikevel ha det må man i mysql legge til ` rundt for at det skal fungere slik man ønsker. Andre databaser benytter andre tegn i den sammenhengen.

Endret av Ernie
Lenke til kommentar
Hva mente du med "tabell eller kolonne med navn from"?

Du kan teknisk sett klare å gi en kolonne eller tabell navnet 'from' (eller andre reserverte ord). Det er en svært, svært dårlig ide, men det er mulig. Det er mer eller mindre de eneste gangene du trenger ` i en spørring. Altså, 'SELECT from FROM tabell WHERE ...' vil åpenbart ikke fungere, men det vil 'SELECT `from` FROM tabell WHERE ...'.

Lenke til kommentar

TheClown, grunnen for at vi setter klammer eller "gåseøyne" før og etter variabler er for at det skal bli lettere oversikt i en SQL setning over hva som er variabler.

 

Hva ser best ut?

$sql = 'SELECT clientID, caseID, caseTitle FROM crm_cases WHERE clientID = '{$clientID}'";

$sql = 'SELECT clientID, caseID, caseTitle FROM crm_cases WHERE clientID = $clientID";

 

Nå som det er sagt, så finner jeg ikke igjen php taggene som forumet her hadde en gang i tiden, dær vil du se på fargekodene hvilken forskjell det utgjør. - I et redigeringsprogram med code highlighting vil det bli mye mer oversiktlig.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...