![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 2 Dołączył: 27.01.2009 Skąd: Warszawa, Mazowieckie Ostrzeżenie: (0%) ![]() ![]() |
Cześć mam pytanie odnośnie zapytania sql, chodzi mi o to, które jest sprawniejsze i bardziej wydajne. Chce zliczać sobie ilość rekordów w jakimś tam warunku np:
czy
co jest wydajniejsze by to zliczyć? Ten post edytował ktosz 22.10.2015, 10:19:54 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 377 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zapewne drugie ale dlaczego sam nie sprawdzisz?
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 2 Dołączył: 27.01.2009 Skąd: Warszawa, Mazowieckie Ostrzeżenie: (0%) ![]() ![]() |
Nie odczuwam różnicy pomiędzy tym i tym ogólnie, ale chciałem się dowiedzieć. Jeśli drugie to ok, dziękuję bardzo za pomoc. A szybszej opcji już nie ma?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jest szybszy sposób. Nie traktuj liczb jako stringi. Porównywanie stringów zajmuje dużo więcej czasu.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 377 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ja bym się raczej przejmował że:
- używasz przestarzałego rozszerzenia mysql_ - ukrywasz błędy @ -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 2 Dołączył: 27.01.2009 Skąd: Warszawa, Mazowieckie Ostrzeżenie: (0%) ![]() ![]() |
Dobrze, małpki@ mam usunięte, a jakie sugierujesz zapytanie zamiast tego? będzie szybsze? ja się wychowałem na takim, innego nie znam.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 377 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
http://php.net/manual/en/book.pdo.php
@mmmmmmm chodziło o to że masz w tabeli wyraźnie int a traktujesz je jak stringi. kiedy = 1 po prostu. Sprawdziłem przed chwilą że takie zapytanie wykorzystuje również indeksy więc jeśli nie masz to ich dodanie równiez pomoże. https://dev.mysql.com/doc/refman/5.0/en/explain.html A poza tym są ważniejsze rzeczy do optymalizacji zazwyczaj. -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
... Dla bazy to nie ma znaczenia, natomiast z punktu widzenia bezpieczeństwa ma.@mmmmmmm chodziło o to że masz w tabeli wyraźnie int a traktujesz je jak stringi. kiedy = 1 po prostu. ... Dla porównania, mamy 2 kody:
W drugim wypadku mimo zastosowania mysql_real_escape_string, możliwe jest przeprowadzenie ataku typu SQL injection. -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Wystarczy $id = (int)$_GET['id']; ale chodziło mi o pokazanie że, nie warto pozbywać się apostrofów nawet dla wartości liczbowych.
-------------------- |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 520 Pomógł: 102 Dołączył: 15.07.2014 Skąd: NULL Ostrzeżenie: (0%) ![]() ![]() |
Tak z ciekawości, (jako ze ja uzywalem tylko PDO od poczatku, nigdy mysql_ czy mysqli_) Po co mysql_real_(...) skoro jest intval czyli bedzie cyfra? Sa jakies wyjątki? (Pytam bo jednak duzo gotowych skryptow korzysta z tych mysql_* to wrazie czego dobrze wiedziec) -- @redeemer - ciekawe co do tego SQL Injection. ![]() -- Wracajac do tematu, Moim zdaniem takze drugie szybsze powinno być. Z tego powodu że baza szybciej zlicza od php, przez co odrazu wysyla do php wynik gotowy. (Jednak nie znam konkretnego dzialania mysql_num_rows to moge sie mylic). Ten post edytował KsaR 23.10.2015, 17:49:18 -------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Tak z ciekawości, (jako ze ja uzywalem tylko PDO od poczatku, nigdy mysql_ czy mysqli_) Np. do zwykłych stringów. W PDO masz to załatwione z automatu (o ile bindujesz parametry, a nie wstawiasz je prosto w zapytanie sql - bo takie cuda też się zdarzają). mysql_real_escape_string tak naprawdę wywołuje natywną funkcje w Mysql C API (https://dev.mysql.com/doc/refman/5.1/en/mysql-real-escape-string.html), która generalnie dodaje backslash do takich znaków jak \x00 (nullbyte), \n, \r \, ', " i \x1a, czyli niemożliwa jest "ucieczka" jeśli wartość jest w apostrofach. A temat addslashes vs mysql_real_escape_string to na inny wątek :-)
Po co mysql_real_(...) skoro jest intval czyli bedzie cyfra? Sa jakies wyjątki? (Pytam bo jednak duzo gotowych skryptow korzysta z tych mysql_* to wrazie czego dobrze wiedziec) -------------------- |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Tak z ciekawości, (jako ze ja uzywalem tylko PDO od poczatku, nigdy mysql_ czy mysqli_) Po co mysql_real_(...) skoro jest intval czyli bedzie cyfra? Sa jakies wyjątki? (Pytam bo jednak duzo gotowych skryptow korzysta z tych mysql_* to wrazie czego dobrze wiedziec) Bo mi się usuwać nie chciało... |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 13:04 |