Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Błędne zapytanie MySQL
Forum PHP.pl > Forum > Przedszkole
Rysh
Witam, mam mały problem... ale najpierw kod:
Kod
WHERE `praca`.`id_miasto` LIKE '%". $miasto ."%'

Gdy $miasto jest null, chciałbym aby zwróciło mi wszystkie wyniki - i tak się dzieje.
Jednak gdy $miasto jest przykładowo 1 - to zwraca mi wszystkie rekordy gdzie w swoim id_miasto posiadają 1.
Dominis
  1. WHERE `praca`.`id_miasto` LIKE '". $miasto ."'


lub

  1. WHERE `praca`.`id_miasto` = '". $miasto ."'
Rysh
Cytat(Dominis @ 15.10.2011, 16:06:20 ) *
  1. WHERE `praca`.`id_miasto` LIKE '". $miasto ."'

lub
  1. WHERE `praca`.`id_miasto` = '". $miasto ."'

W przypadku kiedy w zmiennej $miasto będzie = null, to skrypt zwróci tylko rekordy gdzie `id_miasto` jest null ale ja potrzebuje w tym przypadku żeby zwrócił wszystkie wyniki.
croc
Po pierwsze używaj cudzysłowów i apostrofów prawidłowo.

Co do zapytania:

  1. $sql = 'SELECT ...'.(isset($miasto) ? ' WHERE praca.id_miasto = \''.$miasto.'\'' : null);


Zakładając, że w przypadku niepodania miasta zmiennej $miasto nie ma.
Rysh
croc, dziękuje za pomoc. Jeszcze pytanie odnośnie Twojej uwagi - co masz na myśli używaj poprawnie cudzysłowów i apostrofów?
croc
Proszę bardzo. Uwaga o apostrofach była skierowana w sumie do kolegi Dominisa - teraz zauważyłem, że to on ich użył. Pamiętajmy, że cudzysłów interpretuje, co spowalnia parsowanie kodu.
Fifi209
Cytat(Rysh @ 15.10.2011, 15:35:42 ) *
Kod
WHERE `praca`.`id_miasto` LIKE '%". $miasto ."%'



Cytat(Dominis @ 15.10.2011, 16:06:20 ) *
  1. WHERE `praca`.`id_miasto` LIKE '". $miasto ."'


lub

  1. WHERE `praca`.`id_miasto` = '". $miasto ."'


Cytat(croc @ 15.10.2011, 19:00:45 ) *
Uwaga o apostrofach była skierowana w sumie do kolegi Dominisa - teraz zauważyłem, że to on ich użył.


Rzuciło mi się na oczy, czy Dominis usunął tylko procenty? smile.gif

@topic
Podatne na SQL INJECTION
croc
Zgadza się, to rozwiązanie jest podatne na ataki, jeśli zmienna $miasto nie jest wcześniej przepuszczona przez funkcję ucieczki, np. mysql_real_escape_string.

EDIT
Rzeczywiście, coś dzisiaj ślepy jestem. To autor tematu użył apostrofów/cudzysłowów smile.gif Ja programuję w PHP od kilku dobrych lat i cudzysłowów używam TYLKO kiedy muszę użyć znaku przejścia do nowej linii (\r\n).
Fifi209
Cytat(croc @ 15.10.2011, 19:07:20 ) *
Ja programuję w PHP od kilku dobrych lat i cudzysłowów używam TYLKO kiedy muszę użyć znaku przejścia do nowej linii (\r\n).

A człowiek uczy się przez całe życie, wystarczy używać: PHP_EOL
croc
Rzeczywiście. Niniejszym zmieniam jeden ze swoich nawyków i cudzysłowy odchodzą w niebyt biggrin.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.