SQL grave

  • Beste lezer,


    Soms als ik mijn update SQL query's schrijf moet ik een grave (`) toevoegen anders krijg ik een error en andere keren hoeft dat niet? Weet iemand waarom dit is? Ik zelf denk dat het iets te maken heeft met de tabel structuur.


    Hier een voorbeeld:


    Een SQL code waarbij ik geen grave hoef te gebruiken.

    SQL
    UPDATE menus SET link = :link, menu = :menu WHERE pid = :pid


    Dit is de menus tabel structuur van de genoemde rijen in de query.
    link: VARCHAR(100)
    menu: VARCHAR(50)
    pid: INT, auto increment


    Een SQL waar ik ineens wel graves moet gebruiken.

    SQL
    UPDATE crimes SET `name` = :name, `min_payout` = :min_p, `max_payout` = :max_p, `change` = :change WHERE `id` = :id


    Dit is de crimes tabel structuur van de genoemde rijen in de query.
    name: VARCHAR(100)
    min_payout: INT
    max_payout: INT
    change: INT
    id: INT (auto increment)


    Dit is de error die ik krijg als ik geen graves toevoeg:

    Code
    exception 'PDOException' with message 'SQLSTATE[42000] Syntax error or access violation: 1064; You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'change = '10' WHERE id = '1'' at line 1'


    Ik hoor het graag!

  • Guest, wil je besparen op je domeinnamen? (ad)
  • SQL kent ook functies, en door de (`) geef je aan dat hij niet als function moet worden uitgevoerd maar als zijnde de fieldname.


    Veel van de functions kan je hier vinden: http://docs.oracle.com/cd/B141…1/b10759/functions001.htm


    Een function kan zowel lowercase als uppercase zijn, maar als jij de (`) gebruikt zal hij hem negeren als function en uitvoeren als fieldname.
    Deze fout maak ik ook nog regelmatig dus dan check ik direct of de fieldname geen function is en op die manier ben ik er vrij snel achter.

  • Het engelse woord voor grave is backtick, dat zoekt iets makkelijker.


    Iets vollediger, het gaat om reserved keywords. De MySQL-documentatie schrijft hierover:


    "Certain words such as SELECT, DELETE, or BIGINT are reserved and require special treatment for use as identifiers such as table and column names. This may also be true for the names of built-in functions."
    http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

  • Stefan.J
    Reserved keywords komt op hetzelfde neer als functions, vandaar dat ik hem ook de lijst met namen gaf en een korte uitleg hierover.
    Ik probeer het op die manier wat makkelijker te brengen, ben zelf ook niet zo van de dure woorden heb liever een korte uitleg zodat ik weet waar iemand het over heeft.

  • En ik probeer het verhaal compleet te maken. Ten eerste zijn, functions absoluut niet hetzelfde als reserved keywords. Daarbij klopt het ook nog eens niet dat er backticks moeten worden geplaatst rondom alle functienamen als ze als veldnaam worden gebruikt. Kijk maar eens naar dit stukje SQL:



    Vindt MySQL allemaal goed. Hoewel je uitleg redelijk in de buurt komt van de waarheid, denk ik dat het goed is om een volledig antwoord te vormen en geen halve..

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!