Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Które szybsze?
Forum PHP.pl > Forum > Przedszkole
Jarod
Mam 2 pytania
-----------------
1. Dotyczy stringów. Które zapytanie będzie szybsze:

a)
  1. <?php
  2. $query = &#092;"SELECT * FROM tabela WHERE imie='$_POST[string]';\";
  3. ?>

czy
b )
  1. <?php
  2. $query = &#092;"SELECT * FROM tabela WHERE imie=\".$_POST[string].\";\";
  3. ?>
questionmark.gif

2. Dotyczy liczb. Które zapytanie będzie szybsze:

a)
  1. <?php
  2. $query = &#092;"SELECT * FROM tabela WHERE numer=$_POST[numerek];\";
  3. ?>

czy
b )
  1. <?php
  2. $query = &#092;"SELECT * FROM tabela WHERE numer=\".$_POST[numerek].\";\";
  3. ?>
questionmark.gif

I ewentualnie w jakich sytuacjach które rozwiązanie a czy b jest lepsze?

pozdrawiam
kubatron
Ja tam wiem że to nie ma chyba najmniejszej różnicy ponieważ takie sprawy są małostkowe i się tym nie powinnieneś przejmować, a przejmuj się lepiej danymi które wysyłasz do za pomocą SQL.
Ja osobiscie stosuje zapytanie typu:
  1. SELECT *
  2. FROM tabela WHERE imie = '" . $_POST['STRING'] . "'

Bądz:
  1. SELECT *
  2. FROM tabela WHERE imie = {$_POST['STRING']}


Drugi sposób dokładnie niepamiętam ale chyba tak to się robiło smile.gif
crash
1b i 2b z tym, że 1b jest niepoprawne, poprawna wersja:
  1. <?php
  2. $query = &#092;"SELECT * FROM tabela WHERE imie='\".$_POST[string].\"';\";
  3. ?>
Jarod
Cytat(kubatron @ 2005-05-17 19:08:32)
a przejmuj się lepiej danymi które wysyłasz do za pomocą SQL.

Możesz napisać dokładnie co masz na myśli ? snitch.gif

@crashu: wiem - moje przeoczenie - przepraszam za błąd.

Zadałem te pytania bo znalazłem w topiku http://forum.php.pl/index.php?showtopic=23258&st=0

takie stweirdzenie
Cytat(kinool)
  1. <?php
  2. $query = 'update `uzytkownicy` set `pole`=\"'.$dane.'\" where `id`=\"'.$id.'\";';
  3. ?>

to jak juz powiedziano zadne zabezpieczenie a pozatym zmnijsza wydajnosc zapytania, umieszczanie wartosci liczbowych w momiedzy " " powiduje iz MySQL mysli ze ma do czynienia ze znakami (stringami) i niepotzrebnie musi konwertowac typy.
dr_bonzo
j.w.
  1. <?php
  2. $query = 'SELECT * FROM tabela WHERE imie='' . $_POST[ 'string' ] . ''';
  3. ?>
Jarod
W przykładzie tutaj (na samym końcu) http://webcity.pl/webcity/artykuly.php/t/19 stosowane jest łączenie za pomocą '.
Sam juz nie wiem
Majdan
Cytat(emilio @ 2005-05-17 21:20:31)
Z tego co się orientuje, to łączenie '. jest wolniejsze niż "' w przypadku zapytań SQL. Dlatego jestem za 1a.

A dlaczego w przypadku zapytań? blink.gif

Na początku wydawać by się mogło, że 1b i 2b, ale... Jeżeli string w " musi zostać przeparsowany w poszukiwaniu $ (zmiennych), to tak czy siak został już przeszukany. W takim wypadku wychodzi na to, że nie ma różnicy. tongue.gif

Ale przecież parser jeszcze musi sprawdzić, czy przypadkiem nie chcemy wyświetlić zmiennej $_POS, czy może $_PO, a może właśnie chodzi nam o klucz tablicy $_POST['string']! tongue.gif

Takie dylematy lepiej zostawić sobie i trzymać się tego, aby zmienne łączyć ze stringami, same stringi trzymać w ' i jak najżadziej używać " i \. cool.gif
Jarod
Ok czyli będę stosował notację '.
Jeszcze takie jedno pytanko. Czy zapis $zmienna stosować też tak jak $_POST['znienna']?

Dziękuje za odpowiedzi

pozdrawiam
Majdan
W tablicy $_POST[] są wszystkie zmienne przesłane tą metodą. Znajdują się pod postacią kluczy o takiej samej nazwie - $_POST['{nazwa zmiennej}'].
Jeżeli masz włączone register_globals (nie polecam), to zmienne odbierasz ${nazwa zmiennej}.

Jeżeli chcesz dowiedzieć się więcej o tablicach zajrzyj do manuala.
kubatron
J4r0d: Chodzi mi o dane wejściowe do zapytanie SQL, np SQL INJECTION itp. poczytaj troche na forum o tym jest a ja ci dam linka http://forum.php.pl/index.php?showtopic=23258

I do roboty winksmiley.jpg
Jarod
Cytat(kubatron @ 2005-05-18 20:20:13)
J4r0d: Chodzi mi o dane wejściowe do zapytanie SQL, np SQL INJECTION itp. poczytaj troche na forum o tym jest a ja ci dam linka http://forum.php.pl/index.php?showtopic=23258

I do roboty winksmiley.jpg

Z tym to się już dawno zapoznałem. Ale dzięki winksmiley.jpg
code46
Cytat(Majdan @ 2005-05-17 19:49:50)
Cytat(emilio @ 2005-05-17 21:20:31)
Z tego co się orientuje, to łączenie '. jest wolniejsze niż "' w przypadku zapytań SQL. Dlatego jestem za 1a.

A dlaczego w przypadku zapytań? blink.gif

Na początku wydawać by się mogło, że 1b i 2b, ale... Jeżeli string w " musi zostać przeparsowany w poszukiwaniu $ (zmiennych), to tak czy siak został już przeszukany. W takim wypadku wychodzi na to, że nie ma różnicy. tongue.gif

Ale przecież parser jeszcze musi sprawdzić, czy przypadkiem nie chcemy wyświetlić zmiennej $_POS, czy może $_PO, a może właśnie chodzi nam o klucz tablicy $_POST['string']! tongue.gif

Takie dylematy lepiej zostawić sobie i trzymać się tego, aby zmienne łączyć ze stringami, same stringi trzymać w ' i jak najżadziej używać " i \. cool.gif

Czyli mam pisać tak:

  1. <?php
  2. $query = 'SELECT * FROM tabela WHERE imie='.$_POST[string].';';
  3. ?>


? worriedsmiley.gif
mike
Nie.

Tak:
  1. <?php
  2.  
  3. $query = "SELECT * FROM tabela WHERE imie = '".$_POST[ 'string' ] . "'";
  4.  
  5. ?>


P.S.
Nie masz co robic tylko odświeżać wątki sprzed pondad roku tongue.gif
code46
Cytat(mike_mech @ 2006-04-10 14:10:21)
Nie.

Tak:
  1. <?php
  2.  
  3. $query = "SELECT * FROM tabela WHERE imie = '".$_POST[ 'string' ] . "'";
  4.  
  5. ?>


P.S.
Nie masz co robic tylko odświeżać wątki sprzed pondad roku tongue.gif

Czytałeś co Majdan napisał parę postów wyżej?
nospor
@code64
Cytat
Czytałeś co Majdan napisał parę postów wyżej?
A co ty sie czepiasz majka? Chlopak poprawil ci kod, ktory miales bledny. Jakbys wykonal to zapytanie co stworzyleś, to bys dostal errory smile.gif a to ze majk nie przyjął zapisu Majdana, to nie przestępstwo. pozatym sam bys czytal posty co wyżej, a nie pytal oto samo. dr_bonzo pare postow wyzej podal jak to powinno byc prawidlowo:
  1. <?php
  2. $query = 'SELECT * FROM tabela WHERE imie='' . $_POST[ 'string' ] . ''';
  3. ?>
Po co więc poraz kolejny oto samo pytac?
Jarod
Cytat(nospor @ 2006-04-10 14:42:47)
dr_bonzo pare postow wyzej podal jak to powinno byc prawidlowo:
  1. <?php
  2. $query = 'SELECT * FROM tabela WHERE imie='' . $_POST[ 'string' ] . ''';
  3. ?>
Po co więc poraz kolejny oto samo pytac?

Raczej
  1. <?php
  2. $query = 'SELECT * FROM tabela WHERE imie='' . $_POST['string'] . '';';
  3. ?>
AxZx
a tak nie lepiej?
  1. <?php
  2. $query = 'SELECT * FROM tabela WHERE imie="' . $_POST['string'] .'"';
  3. ?>
nospor
@J4r0d a jaka jest roznica miedzy kodem co podalem (a raczej dr_bonzo) a Twoim? Nie licząc tergo srednika na koncu, który jest zbędny, gdyż gdy wykonujemy zapytania z poziomu php, średników w zapytaniach nalezy unikac

@AxZx jest jakies takie zalecenie, ze w mysql lepiej stosowac apostrofów do napisów, anizeli cudzyslowów
Jarod
Cytat(nospor @ 2006-04-10 19:56:04)
(...)Nie licząc tergo srednika na koncu, który jest zbędny, gdyż gdy wykonujemy zapytania z poziomu php, średników w zapytaniach nalezy unikac(...)

Czytałem o tym. Ale nie widzę przeszkód żeby nie używać średników. W sqlu używa się więc moim zdaniem w skryptach też się powinno.

EDIT: Podobnie można się kłócić co jest poprawne

  1. <?php
  2.  
  3. echo "jakiś tekst";
  4.  
  5. ?>


czy

  1. <?php
  2.  
  3. echo 'jakiś tekst';
  4.  
  5. ?>


Wiadomo, że powinno się pisać pierwszym sposobem
AxZx
hehe a wlasnie ze nie bo drugim tongue.gif
a srednik nie jest konieczny
a skoro niejest konieczny to po co go uzywac?
w sql tez nie musisz dawac srednika na koncu
srednik na koncu oznacza koniec linii, a skoro masz jedno zapytania to nie trzeba pokazywac gdzie jest koniec linii, co innego gdyby byly 2 linie - 2 zapytania.
Jarod
Cytat(AxZx @ 2006-04-10 21:01:14)
hehe a wlasnie ze nie bo drugim tongue.gif
a srednik nie jest konieczny
a skoro niejest konieczny to po co go uzywac?
w sql tez nie musisz dawac srednika na koncu
srednik na koncu oznacza koniec linii, a skoro masz jedno zapytania to nie trzeba pokazywac gdzie jest koniec linii, co innego gdyby byly 2 linie - 2 zapytania.

Może w nowszej bazie ale do tej pory bez średnika mysql nie wykonałby zapytania - nie mówię o wykonywaniu zapytań z php.

echo "cos"; jest poprawne.
AxZx
to moze zdecydujesz sie o czym 'mowisz', bo raz piszesz w zapytaniu (wysylanym z php) srednik a teraz piszesz ze nie mowisz o zapytaniu z php, a na koniec jeszcze piszesz ze echo "cos"; jest poprawne.
Jarod
Cytat(AxZx @ 2006-04-10 21:49:14)
to moze zdecydujesz sie o czym 'mowisz', bo raz piszesz w zapytaniu (wysylanym z php) srednik a teraz piszesz ze nie mowisz o zapytaniu z php, a na koniec jeszcze piszesz ze echo "cos"; jest poprawne.

Zaczynasz się motać.

Napisałeś, że jeśli zapytanie mieści się w jednej linii (mysql z linii poleceń) nie trzeba dawać średnika - a to błąd.

A co do echo "cos"; to napisałem jako porównanie a Ty ten teamt pociągnąłeś dalej.
EOT
AxZx
prosze zeby ktos to potwierdzil
to ze zapytanie np
  1. INSERT
  2. INTO tabela
  3. SET war = 'dupa'


jest tym samym co

  1. <?php
  2. echo "dupa";
  3. ?>
nospor
Cytat
echo "cos"; jest poprawne.
Oczywiście, że jest poprawne. ale to jest temat dotyczący szybkości, a uzywanie "" gdy tego nie potrzeba, tylko spowalnia skrypt, gdyż jak zapewne wiesz "" są specjalnie traktowane przez php smile.gif

@AxZx pierwszy kod to jest zapytanie, drugi to jest napis 'dupa'. tak więc nie potwierdzam smile.gif
Moze skonczmy już tę dyskujsę, bo za bardzo nie wiem do czego ona zmierza. No chhyba ze jakies konkrety wkoncu padną
ActivePlayer
prosze pisać jasno o czym mowicie. jeszcze pare takich postów jak ostatnie i zamkne temat bo nie widze sensu czytać posty, ktore niosą znikomą tresc. Moze wyjsciem z problemu będzie pisanie pełnymi zdaniami czyli zamiast
Cytat
echo "cos"; jest poprawne.

mozna napisac
Cytat
uzycie średnika po w kodzie
Kod
echo "cos";
jest zgodne ze skłądnią php, i srednik powinien znajdować się na końcu (pomijając pare wyjątków, w których mozna go pominąć

oraz
Cytat
W wysyłanych przez php zapytań do mysqla nie mamy obowiązku pisać średnika na końcu ich treści (tresci zapytania, nie ma to nic do składni php),


Zycze udanej dyskusji.
Jarod
Cytat(AxZx @ 2006-04-10 22:33:59)
prosze zeby ktos to potwierdzil
to ze zapytanie np
  1. INSERT
  2.  
  3. INTO tabela
  4.  
  5. SET war = 'dupa'


jest tym samym co

  1. <?php
  2. echo "dupa";
  3. ?>

Cytat(AxZx @ 2006-04-10 22:33:59)
prosze zeby ktos to potwierdzil
to ze zapytanie np
  1. INSERT
  2.  
  3. INTO tabela
  4.  
  5. SET war = 'dupa'


jest tym samym co

  1. <?php
  2. echo "dupa";
  3. ?>

Czepiasz się bo nie czytasz dokładnie.

Chodziło mi o to, że w php rzeczywiście nie trzeba w zapytaniach stawiać średnika, ale spróbuj wydać zapytanie z palca bez średnika - życzę powodzenia..

A co do echo chciałem się dowiedzieć, która opcja jest wydajniesza
  1. <?php
  2.  
  3. echo "tekst";
  4.  
  5. ?>


czy

  1. <?php
  2.  
  3. echo 'tekst';
  4.  
  5. ?>
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.