< návrat zpět

Diskuse


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

Zaslal/a 10.7.2016 12:10

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 10 firmu... Nebýt toho, že firma zkrachovala, dělám to dodnes. V klidu grátis, mě to baví... 3

Zaslat odpověď >

#020292
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.
#020293
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. 7
Na webu/hostingu to projde, i když tam také není v dotazu var4... 4
#020294
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.
#020295
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.
#020299
Děkuji. Vypnu striktní režim a bude to. 5