Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wywoływanie funkcji pomiędzy klamrami w cudzysłowiu
Forum PHP.pl > Forum > Przedszkole
soundtrack
Do wykonywania zapytań stosuje takowy zapis:
  1. $time = time( );
  2.  
  3. DB::query( "UPDATE bw_gracze SET online = {$time} WHERE gid = {$this->player['gid']} LIMIT 1" );

Dla zwiększenia czytelności i sprawienia, aby cała składnia zapytania była kolorowana przez edytor.

Problem pojawia się, gdy chce umieścić w zapytaniu wynik jakiejś funkcji, gdyż nie mogę zastosować takiego zapisu:
  1. DB::query( "UPDATE bw_gracze SET online = {time()} WHERE gid = {$this->player['gid']} LIMIT 1" );

Istnieje jakiś sposób, aby nie trzeba było tworzyć niepotrzebnych zmiennych z wynikami funkcji? tongue.gif
O operatorze konkatenacji słyszałem, ale nie chce stosować tego rozwiązania wink.gif
nospor
Cytat
O operatorze konkatenacji słyszałem, ale nie chce stosować tego rozwiązania
To niech ci się zachce. Po to go wymyslono.

przenosze na przedszkole
ZaXaZ
Cytat(soundtrack @ 15.09.2014, 20:36:01 ) *
Do wykonywania zapytań stosuje takowy zapis:
  1. $time = time( );
  2.  
  3. DB::query( "UPDATE bw_gracze SET online = {$time} WHERE gid = {$this->player['gid']} LIMIT 1" );

Dla zwiększenia czytelności i sprawienia, aby cała składnia zapytania była kolorowana przez edytor.

Problem pojawia się, gdy chce umieścić w zapytaniu wynik jakiejś funkcji, gdyż nie mogę zastosować takiego zapisu:
  1. DB::query( "UPDATE bw_gracze SET online = {time()} WHERE gid = {$this->player['gid']} LIMIT 1" );

Istnieje jakiś sposób, aby nie trzeba było tworzyć niepotrzebnych zmiennych z wynikami funkcji? tongue.gif
O operatorze konkatenacji słyszałem, ale nie chce stosować tego rozwiązania wink.gif


Ja niestety mam za małą wiedzę ale od ok. php 5.3 lub 5.1 jest zmienna z time(); pod $_SERVER['REQUEST_TIME']; w twoim przypadku.
nospor
ps: akurat aktualny czas, to mozesz pobrac w mysql, bez korzystania z php
... online = now()....

Cytat
jest zmienna z time(); pod $_SERVER['REQUEST_TIME']; w twoim przypadku.
To jest czas żądania na serwer a nie czas w ktorym wykonano dany kawalek kodu php. No i bez przesady by z takich rzeczy korzystac do pobrania czasu...
soundtrack
kurka.. chyba jest jakiś sposób na to, przecież nie bez powodu dano w stringach klamry i nie bez powodu korzysta z tego rozwiązania wiele osób w zapytaniach. przerywanie stringa kropką, powoduje utratę kolorowania składni w wielu edytorach, zapewne dlatego stosuje się klamry w queries.

NOW() może rozwiązać jedynie problem czasu.. a co z własnymi funkcjami.

nie, nie, nie. tak łatwo nie odpuszczę. nie zastosuje tych dwóch kropek tongue.gif
kalipek
  1. DB::query(sprintf("UPDATE bw_gracze SET online = %s WHERE gid = %s LIMIT 1", time(), $this->player['gid']));
nospor
Cytat
nie bez powodu dano w stringach klamry i nie bez powodu korzysta z tego rozwiązania wiele osób
Klamry wymyślono na potrzeby zmiennych. Przyjmij to do wiadomosci albo bujaj się z bezsensownym problemem przez kolejne dwa lata tongue.gif
ZaXaZ
Cytat(soundtrack @ 15.09.2014, 20:48:35 ) *
i nie bez powodu korzysta z tego


klamry w cudzyslowiach sa kiedy chcesz miec tam spacje lub znak _ itd bez robienia falszywej zmiennej
czyli:

$x = 'b';
echo "a{$x}c"; //poprawne, "abc";
$y = 'c';
echo "ab$yc"; //undefined variable, niema zmiennej $yc,

@nospor, o.O dzieki za cenna uwage, jak widac nie mozna wierzyc kazdemu artykulowi.

Cytat
It depends.
$_SERVER['REQUEST_TIME']
corresponds to the time when the
request has started, the web
server provides this data.
time() actually runs a syscall in
order to check the time when this
line is called.
.
nospor
Cytat
@nospor, o.O dzieki za cenna uwage, jak widac nie mozna wierzyc kazdemu artykulowi.
No ale w tym cytacie co podales, wszystko sie zgadza. Gdzie widzisz rozbieznosc?
ZaXaZ
Cytat(nospor @ 15.09.2014, 20:58:27 ) *
No ale w tym cytacie co podales, wszystko sie zgadza. Gdzie widzisz rozbieznosc?


no wlasnie potwierdzenie ze sie zgadza, a w blad mnie wprowadzil jakis polak jak sie uczylem optymalizacji biggrin.gif gdzies ma artykul ze time()==$_SERVER['REQUEST_TIME']; a nie chcialo mi sie googlowac, bo przy maaalym skrypcie wynik byl identyczny.
r4xz
To może PDO + bindValue? Poza kolorkami zyskasz jeszcze trochę bezpieczeństwa wink.gif
Martin-ZG
Kod
class test{

    function getName(){

        return 'abc';    
    }

}

$obiekt = new test;

echo "wuala : {$obiekt->getName()}";
Turson
  1. DB::query( "UPDATE bw_gracze SET online = ".$time." WHERE gid = ".$this->player['gid']." LIMIT 1" );

czemu nie tak ohmy.gif
nospor
@Turson toć autor juz pisał czemu nie tak.... bo mu kolorowanie szlag trafia...
soundtrack


sad.gif
by_ikar
Zapytanie nadal może być kolorowane przez edytor, jeżeli:

- odpowiednio ustawisz edytor (możliwość mieszania języków),
- masz odpowiedni edytor,
- PDO i bindvalue jak ktoś zasugerował,
- ORM gdzie ci kolorowanie raw sqla w większości sytuacji nie będzie potrzebne.


PS cudzysłów jest wolniejsze niż apostrof, ponieważ php dodatkowo parsuje stringi w poszukiwaniu zmiennych/klamr. Niby niewiele, ale przy kilkuset takich linijkach jest różnica..
Turson
Cytat(soundtrack @ 15.09.2014, 22:11:33 ) *


sad.gif

Nie wiedziałem, że w programowaniu najważniejsze jest kolorowanie składni
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.