Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Poprawne zapytania mysql
Forum PHP.pl > Forum > Przedszkole
Loped
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?
wNogachSpisz
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 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.
-michu_06-
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.' ;');
toaspzoo
filtrujesz dane funkcjami

addslashes, htmlspecialchars itp. aby nikt Ci bazy nie wykasował w np. wyszukiwarce tongue.gif
gothye
[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 tongue.gif


Brawo za spostrzegawczość ,pokaż stronę w której tak filtrujesz dane ,chętnie sprawdzę exclamation.gif

od filtrowania danych jest mysql_real_escape_string
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.