Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Używanie apostrofów w zapytaniu SQL.
Forum PHP.pl > Forum > Bazy danych > MySQL
Kużdo
Witam,

Swój problem już rozwiązałem, ale mam dylemat, czy używać apostrofy w zapytaniach SQL czy nie... Chciałem wykonać takie zapytanie:
  1. SELECT `u.user_id`, `u.user_name`, `i.user_imie`, `i.user_nazwisko` FROM `users` `u` LEFT JOIN `users_info` `i` USING(`user_id`) WHERE `user_id` = '1';

I dostawałem błąd: [Err] 1054 - Unknown column 'u.user_id' in 'field list'
Wtedy zmieniłem zapytanie na:
  1. SELECT u.user_id, u.user_name, i.user_imie, i.user_nazwisko FROM `users` `u` LEFT JOIN `users_info` `i` USING(`user_id`) WHERE `user_id` = '1';

I zapytanie wykonało się pomyślnie...

Problemem były apostrofy w SELECT, ale dlaczego? Jeśli ktoś mógłby mi to wyjaśnić, byłoby miło. No i inne pytanie, czy jeżeli nie będę używał w ogóle tych lewych apostrofów, to mogę narażać się na jakieś problemy? Czyli zapytania typu:
  1. SELECT u.user_id, u.user_name, i.user_imie, i.user_nazwisko FROM users u LEFT JOIN users_info i USING(user_id) WHERE user_id = '1';


Wiem, że wiele osób nie używa apostrofów, ja ciągle używałem, bo gdzieś kiedyś wyczytałem/nauczyłem się, że tak wyglądają poprawne zapytania SQL...

Pozdrawiam.
Calibri
Cześć.

Jeżeli napisałeś `u.user_id` (z tymi apostrofami) to dlatego pojawił się błąd, bo sql wziął u.user_id jako nazwa kolumny, a nie rozpatrzył że u to nazwa tabeli, a user_id to kolumna.

Używanie apostrofów jak najbardziej możesz używać.

Jeżeli tworzysz kolumnę w tabeli która będzie zawierać opis czegoś, np opis do artykułu to musisz ją jakoś nazwać. Przykładowo description. Wiadomo też że niektórzy skracają nazwy kolumn jak tylko mogą i zamiast description możesz wpisać desc.

Zauważ że nazwa desc to nazwa zaklepana przez sql jako odwrócone sortowanie (od najwcześniejszych dodanych), a więc zapytanie sql np takie:
Kod
select * from sample_table where desc <> ''
zwróci błąd gdyż sql pomyśli że te desc jest nie na tym miejscu.

Natomiast jak napiszesz
Kod
select * from sample_table where `desc` <> ''
to wszystko będzie dobrze - wtedy to, sql pomyśli że desc nie jest odwróceniem kolejności wypluwania danych a jest nazwą kolumny.

Pozdrawiam.
mortus
To nie apostrofy, tylko gravisy, którymi obejmuje się nazwy m. in. tabel i kolumn. Zatem nie `u.user_id` a `u`.`user_id`.
Kużdo
Obojgu dziękuję za odpowiedź.
@mortus, właśnie ta nazwa wypadła mi z głowy, dlatego użyłem apostrofa wink.gif Dzięki ^^ No i faktycznie po sprawdzeniu kod w postaci `u`.`user_id` działa ^^ Dzięki wielkie wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.