![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 1.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wiatm, mam pytanie do znawców baz danych, gdy do zapytania dorzucam pojedynczy apostronf np.: SELECT * FROM tabela WHERE pole= 'wartosc'' ; , bądź gdziekolwiek ich nieparzystą liczbe do otrzymuje komunikat o błędzie syntaktycznym a kiedy dorzucam parzysta liczbe apostroafów to po prostu mam np.: brak wyników wyszukiwania. Mógły by ktoś mnie nakierowac na informacje dlaczego parzyta liczba apostrofów nie wywołyje błędu synkatycznego, jak sie zachowóje silnik bazodanowy. Z góry wielki dzienki.
Ten post edytował c4ld3ra 19.12.2011, 15:37:13 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie jestem pewien czy to takie proste - ale z tego co piszesz jako "nieparzystą" liczbę apostrofów rozumuję jako błąd.
AFAIK apostrofy zawsze powinny występować w parach stąd też - nieparzyście to błąd - wyjątkiem są oczywiście escapowane apostrofy... Co do samego działania zasada jest chyba dość prosta - jeśli w zapytaniu wstawisz gdzieś apostrof - silnik domyśla się, że będziesz w nim wpisywał jakieś słowo klucz - nazwę tablicy, pola itp. czeka zatem na jego zakończenie. Jesli dorzucisz jakieś dwa apostrofy po sobie w zapytaniu silnik spróbuje wyciągnąć z nich jakąś nazwę - jeśli mu się uda i coś będzie nie grało to wywali błąd ale nie syntaktyczny a brak pola o podanej nazwie lub coś w tym rodzaju. Jeśli zaś apostrofy są puste to nie jest to błąd syntaktyczny ![]()
i
Da ten sam wynik ale dokładanie większej liczby apostrofów nawet parami może przynieść dziwne rezultaty - w końcu SQL uzna, że coś w miejscu tych apostrofów powinno być i może wówczas wywalić błąd składni - na przykład:
w tym momencie zamiast `` powinna być nazwa pola - nie ma jej więc to błąd składni itd... Ciekawe pytanie w ogóle - skąd takie? -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
@up
Znak ` to nie jest apostrof ![]() W apostrofie wpisujemy ciągi znaków (stringi). Otwarty apostrof (najprościej) oznacza, że baza danych spodziewa się ciągu znaków i zamykającego apostrofa; nie ma - błąd znak ` to grawis lub backquote. Dużo osób myli te dwa znaki ![]() Grawis ogólnie służy do tego, aby w nazwach tabel i kolumn była możliwość umieszczenia słowa zastrzeżonego SQL http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html wygeneruje błąd, bo usage jest słowem zastrzeżonym natomiast już błędu nie wygeneruje. Ale oczywiście zgadzam się Cudzysłowie proste, apostrofy i grawisy powinny występować parami. Chyba że są escape'owane. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 1.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Szukam informacji jak sie zachowuje silnik BD gdy napotka np.:
bo wtedy nie otrzymuje żdanego komunikatu o błędzie, tylko ze w bazie nie ma takich danych, czy pomiedzy takimi dwoma parami apostrofów, zawierającymi jakieś dane lub nie zachodzi jakaś niejawna konkatenacja i dwa ciagi sa traktowane są jako jeden? A co do pytania Sephirusa skąd takie pytanie to po prostu natrafiłem na zagadnienie i mnie zaciekawiło dlaczego ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 12 Dołączył: 8.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 1.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Podwójny apostrof wewnątrz stringa działa jak escapowanie pojedynczego apostrofu. Najlepiej to sprawdzić zapytaniem:
Zwróci nam wynik: ab'a W moim przykładzie jest odstęp pomiędzy kolejnymi apostrofami, wiec sie nie wyeskejpują, szukam informacji jak sie traktowane są tego rodzaju ciągi znaków. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Zachodzi konkatenacja.
'a' 'b' da Ci ciąg ab Z tym że: 'ab' '' również powinno zwrócić ab. Więc:
=
Przynajmniej w teorii. U mnie działa zupełnie poprawnie. Żadnego braku nie stwierdziłam. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 778 Pomógł: 84 Dołączył: 29.07.2010 Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury. Ostrzeżenie: (20%) ![]() ![]() |
zamieniaj ' na \'
-------------------- LS Easter egg < |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 21:24 |