nette 3.0.x, problem pri nahrazovani parametru u Postgres
- Krejza9
- Člen | 5
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 | 518
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áš.
- Krejza9
- Člen | 5
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
- David Grudl
- Nette Core | 8227
Proč chce Postgres pro EXPLAIN znát hodnoty parametrů je mi teda záhadou, ale v masteru je to opravené.