Špatně vygenerovaný SQL dotaz – chyba NotORM?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jik
Člen | 149
+
0
-

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
+
0
-

Hm… to bude problém na pipni.cz, ale nějaký divný.

s4muel
Člen | 92
+
0
-

a cim naplnas ten msg? nebude to tym, ze je to dlhsie ako 250 znakov?

Mysteria
Člen | 797
+
0
-

Pokoušíš se do sloupce uložit víc dat, než je jeho kapacita, takže ti je to ořízlo. Řešením je zvětšit velikost sloupce.

jik
Člen | 149
+
0
-

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
+
+1
-

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#…