Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Poprawne zapytania mysql
Loped
post
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 9.04.2009

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


Witam. Od razu przepraszam jakby temat się powtórzył, ale nie mogłem znaleźć podobnego. ; ) Jako początkujący w MySQL, chciałbym się dowiedzieć jak dobrze pisać zapytania. Może wyjaśnię mój problem na przykładzie:

  1. SELECT * FROM pracownicy WHERE id="'.$id.'"
. Jak zauważyłem niektórzy obok zmiennej id wstawiają "', lub pojedyńcze dwa apostrofy(id=''.$id.''). Czasem zdarzyło mi się zobaczyć, że wysępuje tylko jeden apostrof. Jak poprawnie, i przede wszystkim optymalnie i dobrze pisać zapytania? Chodzi jeszcze o zaczynanie zapytania. Nie wiem czy robi to jakąś różnice, ale wolę spytać. Lepiej zaczynac od ', czy "?

Drugą sprawą są backslashe.
  1. SELECT * FROM pracownicy WHERE id=\''.$id.'\'
Po co, i kiedy je wykorzystywać? Czy ich wykorzystanie ma jakiś związek z filtracją danych?
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Wydaje mi się że o ile nie masz zamiaru zostać specem od baz danych, to taka wiedza jest nieprzydatna. Ja na przykład nie wiem nic na temat niuansów w różnicach składni jeżyka SQL pomiędzy różnymi bazami danych. Przypuszczam że miałbym nie lada problem aby napisać nawet najprostsze zapytanie. Dostatecznie trudne jest ciągłe przełączane się między PHP i JavaScript, nie widzę nic przyjemnego w perspektywie dobijania tego SQLem (IMG:style_emoticons/default/smile.gif) Oczywiście bazy danych są niezbędne, dlatego wynaleziono między innymi cos takiego jak ActiveRecords.

  1. $db = DB('sqlite://localhost/mydb.sqlite');
  2. $query = $db->get_where('pracownicy', array('id' => $id));
  3. print_r( $query->result() );


Mam nadzieje że skuszony oślepiającą prostotą, zdecydujesz się na to rozwiązanie.
Go to the top of the page
+Quote Post
--michu_06--
post
Post #3





Goście







jak już piszesz to całość/

1.)
  1. mysql_query('SELECT * FROM pracownicy WHERE id="'.$id.'"');

2.)
  1. mysql_query("SELECT * FROM pracownicy WHERE id=\''.$id.'\");


Apostrof od cudzysłowie różni się tym, że apostrof informuje parser o tym iż zawartość w nim podana nie zawiera żadnych zmiennych itp. które by musiały zostać dodatkowo przetworzone przez parser . Natomiast cudzysłowie informuje, iż w podanych w nim wartościach istnieją zmienne, które muszą zostać sprawdzone przez parser. Różnice to tylko czas w generowaniu, zarówno dla mysql jak i php.

co nie zmienia faktu, że oba zapytania są nie poprawnie napisane pod względem wydajności.
dla zmiennych typu INT BIGINT TINYINT (itd. chodzi o liczby całkowite) nie powinniśmy stosować cudzysłowia ani apostrofu, poprawne zapytanie powinno wyglądać tak :
  1. mysql_query('SELECT * FROM `pracownicy` WHERE `id`='.$id.' ;');
Go to the top of the page
+Quote Post
toaspzoo
post
Post #4





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


filtrujesz dane funkcjami

addslashes, htmlspecialchars itp. aby nikt Ci bazy nie wykasował w np. wyszukiwarce (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
gothye
post
Post #5





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


[html][/html]
Cytat(toaspzoo @ 12.02.2012, 17:47:22 ) *
filtrujesz dane funkcjami

addslashes, htmlspecialchars itp. aby nikt Ci bazy nie wykasował w np. wyszukiwarce (IMG:style_emoticons/default/tongue.gif)


Brawo za spostrzegawczość ,pokaż stronę w której tak filtrujesz dane ,chętnie sprawdzę (IMG:style_emoticons/default/exclamation.gif)

od filtrowania danych jest mysql_real_escape_string
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: 23.08.2025 - 07:12