[PHP / SQL] Backticks en newlines

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 30-04 10:28

JeRa

Authentic

Topicstarter
Ik ben redelijk bekend met zowel PHP als SQL, maar heb nu twee kleine vraagjes :)

1) Vroeger, toen ik nog veel moest debuggen, werkte de volgende query niet in een wat oudere versie van MySQL:
code:
1
SELECT kolom FROM email_lijst WHERE etc

Nu bleek dat 'email_lijst' niet mocht (:?) maar weer wél als ik daar backticks omheen plaatste, en dus leerde ik backticks gebruiken. Sindsdien schrijf ik álle queries in de volgende stijl:
code:
1
SELECT `kolom` FROM `tabel` WHERE `kolom` = 'tekst' OR `kolom2` = 10

Allemaal leuk & aardig, maar ik vraag me af of dit nog wel nodig is. Bij latere versies van MySQL ben ik de fout nog niet tegengekomen, maar uit voorzorgsmaatregelen doe ik het maar zo. Kan ik die backticks weglaten? Vooral met JOINS is 't zo'n typwerk :P

2) phpMyAdmin zet alle newlines in stukken meer-regelige teksten die in een query komen om naar "\\n" die vervolgens door MySQL netjes weer in newlines wordt omgezet. Ik laat de newlines echter altijd puur in de query staan, niet echt netjes dus, maar mag dat en kan dat nooit fouten opleveren? Ik denk dat het één en 't ander wel te maken heeft met je persoonlijke codeerstijl, maar miss dat iemand nog argumenten heeft :)

ifconfig eth0 down


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 23:24

ripexx

bibs

Rechtstreeks uit het manual van MySQL:
An identifier may be quoted or unquoted. If an identifier is a reserved word or contains special characters, you must quote it whenever you refer to it. For a list of reserved words, see section 10.6 Treatment of Reserved Words in MySQL. Special characters are those outside the set of alphanumeric characters from the current character set, `_', and `$'.

The quote character is the backtick (``'):
Om ook even te reageren op je tweede punt, bedoel je daarmee het volgende:
code:
1
2
3
4
SELECT veld1, veld2
FROM tabel
WHERE veld1 = 'iets'
ORDER BY veld2 ASC;


Want dit maakt zover ik weet niets uit, ik heb er iig nooit problemen mee ondervonden. Daarnaast is het zeker met debuggen van grotere queries met meerdere joinsverdomt handig. :) Eventuele newlines in string wil je natuurlijk gewoon overnemen. ;)

[ Voor 46% gewijzigd door ripexx op 11-05-2004 16:54 ]

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 30-04 10:28

JeRa

Authentic

Topicstarter
@ripexx

Bedankt :) met het tweede punt bedoel ik het verschil tussen:
code:
1
UPDATE tabel SET waarde = 'test\ntest'

en:
code:
1
2
UPDATE tabel SET waarde = 'test
test'

De tweede manier wordt door mijn PHP scripts gegenereerd omdat ik newlines niet omzet naar "\\n" :)

ifconfig eth0 down


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 23:24

ripexx

bibs

JeRa schreef op 11 mei 2004 @ 16:58:
@ripexx

Bedankt :) met het tweede punt bedoel ik het verschil tussen:
code:
1
UPDATE tabel SET waarde = 'test\ntest'

en:
code:
1
2
UPDATE tabel SET waarde = 'test
test'

De tweede manier wordt door mijn PHP scripts gegenereerd omdat ik newlines niet omzet naar "\\n" :)
Ik heb er zelf nog niet eens over nagedacht. Ik verwerk newlines niet bijzonder en als ze dus in een string terecht komen en je zou de query printen ontstaat er dus dezelfde situatie als in jouw tweede geval. Ik heb hier nog geen problemen mee onder vonden. Door de quotes wordt de string toch gezien als een geheel. Daarom escape je de quotes. In de twee cms die ik gebouwd heb (PHP/MySQL) zijn er daarbij nog geen problemen ontstaan. :)

buit is binnen sukkel