nette 3.0.x, problem pri nahrazovani parametru u Postgres

Krejza9
Člen | 5
+
0
-

Ahoj, narazil jsem na dost zvlastni chovani nette/database 3.0.x u Postgres DB.
Dochazi k chybe pri nahrazovani parametru

Pri prvnim pruchodu se nahradi

Vypis z postgres logu

2020-01-03 10:49:32.787 CET [1568] LOG:  execute pdo_stmt_00000022: SELECT * FROM "games_play" WHERE ("registration_date" < $1) AND ("registration_status_id" > $2)
2020-01-03 10:49:32.787 CET [1568] DETAIL:  parameters: $1 = '2020-01-03 10:49:32.787212+01', $2 = '1'

Pri nasledujicim jiz ne

2020-01-03 10:49:33.217 CET [1568] ERROR:  bind message supplies 0 parameters, but prepared statement "pdo_stmt_00000045" requires 2
2020-01-03 10:49:33.217 CET [1568] STATEMENT:  EXPLAIN SELECT * FROM "games_play" WHERE ("registration_date" < $1) AND ("registration_status_id" > $2)
2020-01-03 10:49:33.218 CET [1568] LOG:  statement: DEALLOCATE pdo_stmt_00000045

U nette 2.4 se podobny problem vubec nestaval az od verze 3.0.x

Editoval Krejza9 (3. 1. 2020 11:24)

nightfish
Člen | 472
+
0
-

Krejza9 napsal(a):

Ahoj, narazil jsem na dost zvlastni chovani nette/database 3.0.x u Postgres DB.
Dochazi k chybe pri nahrazovani parametru

Ukaž kód, který k vytváření dotazů a jejich zavolání používáš. Také prosím uveď, jakou konkrétní verzi balíčku nette/database a Postgresu používáš.

David Grudl
Nette Core | 8136
+
0
-

Asi se to týká 3.0.5, ale nikoliv 3.0.4, co?

Krejza9
Člen | 5
+
0
-

Aktualne pozivam nette/database 3.0.5 zkousel jsem i ver. z masteru

    public function renderDefault()
    {

       $this->template->games_play = $this->database->table('games_play')->where(array('registration_date > ?' => 'now()', 'registration_status_id > ?' => '1'));

       $this->template->games_play_closed = $this->database->table('games_play')->where(array('registration_date < ?' => 'now()', 'registration_status_id > ?' => '1'));


        if ($this->getUser()->isLoggedIn()) {
            $this->template->card_color = $this->database->table("gamers")
                ->where('gamer_id', $this->user->identity->id)
                ->fetch()->offsetGet('card_color');
        }
   }
}

Puvodne byl kod napsany:

    public function renderDefault()
    {
        $this->template->games_play = $this->database->table('games_play')
            ->where('registration_date > ?','now()')
            ->where('registration_status_id > ?','1')
            ->order('date_of_game DESC');

        $this->template->games_play_closed = $this->database->table('games_play')
            ->where('registration_date < ?','now()')
            ->where('registration_status_id > ?','1')
            ->order('date_of_game DESC');

        if ($this->getUser()->isLoggedIn()) {
            $this->template->card_color = $this->database->fetchField('SELECT card_color FROM gamers WHERE gamer_id = ?', $this->user->identity->id);
        }
   }
}

U obou je stejny problem

Krejza9
Člen | 5
+
0
-

Je pravda ze po otestovani ver. 3.0.4 problem nenastal.

Krejza9
Člen | 5
+
0
-

Zjistil jsem ze u verze 3.0.5 se problem vyskytuje pouze pokud se zapne

$configurator->setDebugMode(TRUE);

Tazke predpokladam ze 2. pruchod dela prave TRACY debugger.

Editoval Krejza9 (3. 1. 2020 12:52)

David Grudl
Nette Core | 8136
+
+3
-

Proč chce Postgres pro EXPLAIN znát hodnoty parametrů je mi teda záhadou, ale v masteru je to opravené.

Krejza9
Člen | 5
+
+1
-

Diky moc za rychlou opravu.