Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Błędne zapytanie MySQL
Rysh
post
Post #1





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


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.


--------------------
Go to the top of the page
+Quote Post
Dominis
post
Post #2





Grupa: Zarejestrowani
Postów: 77
Pomógł: 19
Dołączył: 13.02.2010

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


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


lub

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


--------------------
www.maxcode.pl
Go to the top of the page
+Quote Post
Rysh
post
Post #3





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


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.


--------------------
Go to the top of the page
+Quote Post
croc
post
Post #4





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


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





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


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?


--------------------
Go to the top of the page
+Quote Post
croc
post
Post #6





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


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.

Ten post edytował croc 15.10.2011, 18:01:04
Go to the top of the page
+Quote Post
Fifi209
post
Post #7





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
croc
post
Post #8





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


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).

Ten post edytował croc 15.10.2011, 18:09:46
Go to the top of the page
+Quote Post
Fifi209
post
Post #9





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
croc
post
Post #10





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Rzeczywiście. Niniejszym zmieniam jeden ze swoich nawyków i cudzysłowy odchodzą w niebyt biggrin.gif
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 02:11