升级我的mysql后我遇到数据库问题。在日志中我可以看到:
PHP致命错误:未捕获PDOException:SQLSTATE [23000]:完整性约束违规:1048列'kod_tecdoc'不能为空。
当我尝试在表格中插入或更新行时 升级工程之前,我很惊讶。我的表字段允许清空值。我知道解决方案可能是
if($ kod_tecdoc == null)$ kod_tecdoc ='';
但它无法解决问题。也许应该在mysql中更改一些设置?
我的mysql版本:
+-----------------+
| @@version |
+-----------------+
| 5.7.12-0ubuntu1 |
+-----------------+
表格结构
CREATE TABLE `Realizacje` (
`id` int(11) NOT NULL,
`tekst_allegro` text NOT NULL,
`typy_felg` int(11) NOT NULL,
`nazwa` varchar(200) DEFAULT NULL,
`nazwa_allegro` varchar(255) NOT NULL,
`producent` int(11) NOT NULL DEFAULT '0',
`cena_netto_gielda` decimal(12,2) NOT NULL,
`cena_brutto_gielda` decimal(12,2) NOT NULL,
`cena_netto_hurt` decimal(12,2) NOT NULL,
`cena_brutto_hurt` decimal(12,2) NOT NULL,
`cena_netto_warsztat` decimal(12,2) NOT NULL,
`cena_brutto_warsztat` decimal(12,2) NOT NULL,
`vat` int(11) NOT NULL,
`kod_produkt` varchar(255) NOT NULL,
`on_pojazdy` varchar(1) NOT NULL DEFAULT '0',
`on_zamienniki` varchar(1) NOT NULL DEFAULT '0',
`on_kategoria` varchar(1) NOT NULL DEFAULT '0',
`kod` varchar(255) NOT NULL,
`kod_dostawcy` varchar(50) NOT NULL,
`kod_tecdoc` varchar(50) NOT NULL,
`widoczny` varchar(2) NOT NULL DEFAULT '1',
`dostepny` varchar(2) NOT NULL DEFAULT '1',
`dostepnosc` int(11) NOT NULL,
`promocja` varchar(2) NOT NULL DEFAULT '0',
`promocja_glowna` tinyint(1) NOT NULL DEFAULT '0',
`nowosc` varchar(2) NOT NULL DEFAULT '0',
`nowosc_glowna` tinyint(1) NOT NULL DEFAULT '1',
`glowna` varchar(1) NOT NULL,
`bestseller` varchar(1) DEFAULT '0',
`bestseller_glowna` tinyint(1) NOT NULL DEFAULT '0',
`polecamy` varchar(1) NOT NULL DEFAULT '0',
`polecamy_glowna` varchar(1) NOT NULL DEFAULT '0',
`skrot` text NOT NULL,
`tekst` text,
`odwiedziny` bigint(20) DEFAULT '0',
`lang` varchar(5) NOT NULL DEFAULT 'pl',
`status` int(11) DEFAULT '0',
`link` varchar(255) DEFAULT NULL,
`route_id` int(11) DEFAULT NULL,
`miary` int(11) NOT NULL,
`rabat` decimal(12,2) NOT NULL,
`narzut` varchar(1) DEFAULT '0',
`aukcje` varchar(255) NOT NULL,
`stan` decimal(12,2) NOT NULL DEFAULT '1.00',
`aktualizowany` varchar(1) NOT NULL DEFAULT '1',
`dostawanatelefon` varchar(1) NOT NULL,
`dodano` varchar(50) DEFAULT NULL,
`aktualizacja` varchar(50) DEFAULT NULL,
`kosztyAllegro` text NOT NULL,
`allegroCennik` int(11) NOT NULL,
`trybCena` varchar(255) NOT NULL,
`allegro_ok` varchar(1) NOT NULL DEFAULT '0',
`ogranicz_ilosc_znakow` int(11) NOT NULL DEFAULT '50'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
答案 0 :(得分:6)
您的本地MySQL服务器正在以“严格”模式运行,这会在您的情况下引发错误,而其他几个服务器会在没有严格模式的情况下“优雅地”处理。从MySQL 5.7.5开始,默认的SQL模式包括STRICT_TRANS_TABLES
,这正是你头疼的原因。
要更改本地服务器的模式,请编辑my.cnf(如果您运行的是Windows,则编辑my.ini)并将模式设置为:
sql-mode=""
或者,在您的网络应用程序中连接到MySQL后,请在建立连接后立即执行此查询:
SET GLOBAL sql_mode = '';
我建议不要这样做,因为它可以让你执行一些粗心的陈述。从长远来看,你最好使用adjusting your schema instead。
答案 1 :(得分:2)
我的表格字段允许清空值。
那不是真的:
NULL
如果列实际上是可选的,请更改表并使其for (int i = 0;i<Lesson.length;i++)
if(Lesson[i].getBeginDate() == beginDate || Lesson[i].getEndDate() == endDate){
return false; //means there's a class in this date/time }
else
return true; // there's no class in this time. do something..
能够。
答案 2 :(得分:-4)
尝试在引号之间插入一个空格,如下所示:
if ($kod_tecdoc == null) $kod_tecdoc = ' ';