Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Używanie apostrofów w zapytaniu SQL.
Kużdo
post
Post #1





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Calibri
post
Post #2





Grupa: Zarejestrowani
Postów: 26
Pomógł: 4
Dołączył: 22.07.2011

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Calibri 1.08.2011, 15:15:36
Go to the top of the page
+Quote Post
mortus
post
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


To nie apostrofy, tylko gravisy, którymi obejmuje się nazwy m. in. tabel i kolumn. Zatem nie `u.user_id` a `u`.`user_id`.
Go to the top of the page
+Quote Post
Kużdo
post
Post #4





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


Obojgu dziękuję za odpowiedź.
@mortus, właśnie ta nazwa wypadła mi z głowy, dlatego użyłem apostrofa (IMG:style_emoticons/default/wink.gif) Dzięki ^^ No i faktycznie po sprawdzeniu kod w postaci `u`.`user_id` działa ^^ Dzięki wielkie (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 30.11.2025 - 05:34