Diskuse

Téma: Rozdíl mezí kódem a databází

Narazil jsem na chybičku, že vytvoření nové sekce skončí vždy na hlášce Špatný vstup. Je buď chyba v kódu nebo v databázi, protože v kódu je insert:
INSERT INTO `sun-root` (type,title,title_seo,keywords,description,intersection,ord,visible,public,level,autotitle,intersectionperex,content,events,var1,var2,var3) VALUES (1,'xMenu','xmenu','xmenu','',-1,1,1,1,0,1,'','',NULL,0,0,0)
kdežto v databázi je struktura
INSERT INTO `nxt_snw`.`sun-root`
(`id`,....`var1`,`var2`,`var3`,`var4`) VALUES (<{id: }>,....<{var1: }>,<{var2: }>,<{var3: }>,<{var4: }>);

- opsáno z MySQL Workbench.
To zapřičiní, že se zápis do db nepovede vždy...
Ve vytváření databáze je var4 také:
$sql[] = "CREATE TABLE `" . _mysql_prefix . "-root` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(96) NOT NULL,
`title_seo` varchar(255) NOT NULL,
`keywords` varchar(128) NOT NULL DEFAULT '',
`description` varchar(128) NOT NULL DEFAULT '',
`type` tinyint(4) NOT NULL,
`type_idt` varchar(16) DEFAULT NULL,
`intersection` int(11) NOT NULL,
`intersectionperex` text NOT NULL,
`ord` float NOT NULL,
`content` longtext NOT NULL,
`visible` tinyint(1) NOT NULL,
`public` tinyint(1) NOT NULL,
`level` int(11) NOT NULL DEFAULT '0',
`autotitle` tinyint(1) NOT NULL DEFAULT '0',
`events` varchar(255) DEFAULT NULL,
`var1` int(11) NOT NULL,
`var2` int(11) NOT NULL,
`var3` int(11) NOT NULL,
`var4` int(11) NOT NULL,

PRIMARY KEY (`id`),
KEY `title_seo` (`title_seo`),
KEY `level` (`level`),
KEY `type` (`type`),
KEY `intersection` (`intersection`),
KEY `ord` (`ord`),
KEY `visible` (`visible`),
KEY `public` (`public`),
KEY `autotitle` (`autotitle`),
KEY `var1` (`var1`),
KEY `var2` (`var2`),
KEY `var3` (`var3`),
KEY `var4` (`var4`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2";

Btw, nechcete beta testera? Dělal jsem to 6 let profesionálně pro německou 😎 firmu... Nebýt toho, že firma zkrachovala, dělám to dodnes. V klidu grátis, mě to baví... 😄
postZaslat odpověď
Na jaké verzi systému by k tomuto mělo docházet? Systém běží na několika stovkách domén a je nanejvýš divné, že by to nikdo nenahlásil, že mu systém nefunguje.
sunlightcms_754_STABLE0_prod_noinstaller

PHP 5.6
Apache/2.4.18 (Ubuntu) Server built: 2016-04-15T18:00:57
MySQL 5.7.12

/admin/require/sub/content-editscript.php' řádek 234

A dělá to pouze při ladění na localhostu. 😞
Na webu/hostingu to projde, i když tam také není v dotazu var4... 😕
Insert vkládá do vyjmenovaných sloupců (pokud jsou) tzn. že pokud některý sloupec neuvedeš tak do něho neukládáš.

Provedl jsem přes phpMyAdmin INSERT INTO `sunlight-root` (type,title,title_seo,keywords,description,intersection,ord,visible,public,level,autotitle,intersectionperex,content,events,var1,var2,var3) VALUES (1,'xMenu','xmenu','xmenu','',-1,1,1,1,0,1,'','',NULL,0,0,0)který se skončil výsledkem Byl vložen 1 řádek.
A Adminer Příkaz proběhl v pořádku, byl změněn 1 záznam.
Problém je ten, že v databázi chybí výchozí hodnoty pro sloupce. Tak to bylo snad již od první verze, ale nevadilo to, jelikož nebýval na MySQL serverech aktivován striktní režim (STRICT_ALL_TABLES). To se ale změnilo od MySQL 5.6, kde je ve výchozím stavu aktivován.

Správným řešením je samozřejmě doplnit dané výchozí hodnoty, ale ve verzích 7.x již nechci patchovat datázi (zpětná kompatibilita). Od verze 7.5.5 (zatím nevydána) se tedy hned po připojení k databázi provede dotaz SET sql_mode='', který striktní režim vypne.
Děkuji. Vypnu striktní režim a bude to. 😁