Špatně vygenerovaný SQL dotaz – chyba NotORM?
- jik
- Člen | 149
Zdravím,
mám metodu:
<?php
public function updateColumn ($id, $column, $value, $editor) {
return $this->find($id)->update(array(
$column => $value,
'editor_id' => $editor,
'edited' => new \DateTime()));
}
?>
a volám ji takto:
<?php
$msg = $dapl->msg;
if ($psj=='p') { //pozemky
$msg.= "{$o_nemovitost->pc}";
} elseif ($psj=='s') { // stavby
$msg.= ($o_nemovitost->rada) ? "St.{$o_nemovitost->cislo}" : $o_nemovitost->cislo;
$msg.= ($o_nemovitost->podlomeni) ? "/{$o_nemovitost->podlomeni}" : '';
} else { // jednotky
$msg.= ($o_nemovitost->p_rada) ? "St.{$o_nemovitost->p_cislo}" : $o_nemovitost->p_cislo;
$msg.= ($o_nemovitost->p_podlomeni) ? "/{$o_nemovitost->p_podlomeni}" : '';
}
$msg .= " {$dosvobozeni}; ";
$this->context->dapl->updateColumn($dapl->id, 'msg', $msg, $this->uid);
?>
hlásí to:
SQLSTATE[22001]: String data, right truncated: 7 ERROR: value too long for type
character varying(250)
a vygenerovaný dotaz je:
UPDATE "dapl"
SET "msg"=?, "editor_id"=2, "edited"='2014-11-06 09:12:18'
WHERE ("dapl"."id" = 9495)
Toto docela určitě ještě včera fungovalo, dnes to bez jakékoliv aktualizace udělato tuto chybu. Nette 2.2.2 na pipni.cz
Upřesnění: je to na PostgreSQL
Editoval jik (6. 11. 2014 9:44)
- jik
- Člen | 149
To není o množství dat, ale o špatně sestaveném dotazu. Namísto nějakého, byť dlouhého řetězce se v dotazu objevil otazník a proto to vyhodilo chybu. Zatím jsem to trochu obešel, abych fungoval, prověřovat budu později. Ten kód ovšem na serveru (pipni.cz) byl několik dní a předtím běželo v pořádku, na lokálu to takovouto blbost nedělá vůbec (OpenSUSE 13.1, apache 2.4.6, php 5.4.20, Nette 2.2.3).
- Mysteria
- Člen | 797
Ten otazník je tam správně, protože dlouhé řetězce se na úrovni PDO tak zpracovávají. Každopádně pokud jsi opravdu měl chybu SQLSTATE[22001]: String data, right truncated: 7 ERROR: value too long for type character varying(250) tak dle chybových hlášení v MySQL dokumentaci je to jasné – ukládáš do sloupce pro 250 znaků text delší než 250 znaků. Nic víc bych v tom nehledal… naschvál zvětši sloupec na 10k znaků a zkus tu chybu nasimulovat znova. Viz: http://dev.mysql.com/…-server.html#…