Nette\DateTime nevrazi pri selectu co by melo (co bych chtel)
- Stig
- Člen | 29
Pri selectu dat z tabulky kde je sloupec typu „datetime“ roven „0000–00–00 00:00:00“ mi Nette\DateTime vyplivne zajimavej cas „-0001–11–30 00:00:00“ coz se mi nelibi. Tabulky, sloupce, databaze vse je v utf8. S Dibi funguje OK. A vsechno ostatni – diakritika.. OK. Pri nenulovym datu je vysledek taky OK.
Pouzivam posledni Nette s Nette\Database.
Jediny cim jsi nejsem jistej je charset v configu pri pripojeni:
default:
dsn: 'mysql:host=localhost;dbname=x;charset=utf-8'
user: x
password: x
jinak uz opravdu nevim co s tim. Nevi nekdo?
diks
//nette database - NENI ok.
$a = $this->context->database->table("admin")->select("last_login")->where(array("id_admin" => 2))->fetch()->toArray();
dump($a);
array(1) {
last_login => Nette\DateTime(3) {
date => "-0001-11-30 00:00:00" (20)
timezone_type => 3
timezone => "Europe/Prague" (13)
}
}
//klasika je OK
$con = mysqli_connect("localhost","x","x","x");
$result = mysqli_query($con, "SELECT last_login FROM admin where id_admin = 2");
dump($result->fetch_row());
array(1) [
0 => "0000-00-00 00:00:00" (19)
]
- David Grudl
- Nette Core | 8233
Teoreticky by se místo DateTime(‚0000–00–00 00:00:00‘) mohlo vyhazovat NULL.
- Climber007
- Člen | 105
Jak to vypadá z úpravou, kde by měly hodnoty ‚0000–00–00 00:00:00‘ z DB reprezentovat NULL v PHP? Ten záporný nesmysl, který to momentálně vyhazuje není nic příjemného :-)
- h4kuna
- Backer | 740
Udělej si trigger při uložení do db aby převedl ‚0000–00–00 00:00:00‘ na NULL
SET NEW.last_login := NULLIF(NEW.last_login, '0000-00-00 00:00:00');
Pak ti Nette bude vracet NULL.
Nebo se koukni na tuto proceduru která má zavislost na is_numeric a pak to můžeš používat kdekoliv v db.
CALL null_default(NEW.last_login);
Editoval h4kuna (17. 9. 2013 13:40)