Dotaz funkční na localhostu, nikoliv na hostingu

Bulhy
Člen | 6
+
0
-

Zdravím,

nahrál jsem svoji webovku na hosting, vše nastavil jak bylo potřeba. Naprostá většina věcí funguje, jen mám problém s jedním dotazem na databázi.

Mám tabulky

CREATE TABLE `available_lessons` (
  `ID` varchar(255) NOT NULL,
  `date` datetime NOT NULL,
  `hour` int(10) unsigned NOT NULL,
  `instructor_ID` int(11) NOT NULL,
  PRIMARY KEY (`ID`),
  KEY `instructor_ID` (`instructor_ID`),
  CONSTRAINT `available_lessons_ibfk_1` FOREIGN KEY (`instructor_ID`) REFERENCES `instructors` (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `instructors` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `ski` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `carving` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `snowboard` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `telemark` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `english` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `monoski` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `hours_teached` int(10) unsigned NOT NULL DEFAULT '0',
  `user_ID` int(11) unsigned NOT NULL,
  PRIMARY KEY (`ID`),
  KEY `user_ID` (`user_ID`),
  CONSTRAINT `instructors_ibfk_4` FOREIGN KEY (`user_ID`) REFERENCES `accounts` (`ID`) ON DELETE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

A dotaz:

	$this->database->table('available_lessons')->where($data)->fetchAll();

kde $data:

	[
		'instructor.carving >= ?' => $this->carving,
		'instructor.snowboard >= ?' => $this->snowboard,
		'instructor.telemark >= ?' => $this->telemark,
		'instructor.english >= ?' => $this->english,
		'instructor.monoski >= ?' => $this->monoski
	]

Na localhostu to normálně funguje, tzn. na databázi se dotazuje

	SELECT `available_lessons`.ID, `available_lessons`.`date`, `available_lessons`.`hour`
	FROM `available_lessons`
	LEFT JOIN `instructors` `instructor` ON `available_lessons`.`instructor_ID` = `instructor`.ID
	WHERE (`instructor`.`carving` >= 0) AND (`instructor`.`snowboard` >= 0) AND (`instructor`.`telemark`
	>= 0) AND (`instructor`.`english` >= 0) AND (`instructor`.`monoski` >= 0)

Ovšem na hostingu hází chybu

Jak je vidět, tak to vygenerovalo dotaz bez joinu:

	SELECT *
	FROM `available_lessons`
	WHERE (`instructors`.`carving` >= 0) AND (`instructors`.`snowboard` >= 0) AND
	(`instructors`.`telemark` >= 0) AND (`instructors`.`english` >= 0) AND (`instructors`.`monoski` >=
	0)

Nemohu přijít na to, proč. Všechny ostatní dotazy normálně fungují (je pravda, že tohle je asi jediný, kde si ten join vynucují už takto ve WHERE klauzuli). Za rady budu rád.

Václav Pávek
Backer | 96
+
+1
-

Zkontroluj verzi PHP – podobný problém s JOINy

Bulhy
Člen | 6
+
0
-

Právě jsem chtěl napsat, že jsem to vyřešil nastavením PHP na 5.6 ze 7.3. Na PC mi jede 7.2.8 a na hostingu je výběr jen mezi 5.6 a 7.3. Každopádně už to funguje jak má :)

Šaman
Člen | 2632
+
+1
-

Jak to tak sleduju, tak s PHP 7.3 jsou docela problémy? Jedu na 7.2 a asi u toho ještě nějakou dobu zůstanu.

Bulhy
Člen | 6
+
0
-

Vypadá to tak. Ani jsem nevěděl, že už je 7.3, při nastavování jsem viděl to, co jsem chtěl, tedy 7.2, se kterou také nemám žádné problémy.

Václav Pávek
Backer | 96
+
+1
-

Pro Nette 2.4 je u našeho CMS konečná PHP 7.2 – bez nutnosti úpravy kódu. Na PHP 7.3 problém s JOINy, jinak bez problému.

@Bulhy v případě problémů by mělo stačit aktualizovat nette/database na poslední verzi. Pak by to mohlo fungovat (testoval jsem problémový modul na Nette 3.0 a bylo to v pohodě).

@Šaman PHP 7.2 je jistota, ale primárně všechen kód tvořím na PHP 7.3.

Editoval Václav Pávek (26. 3. 2019 13:35)

Milo
Nette Core | 1283
+
+2
-

V PHP 7.3 je nová verze PCRE, ale ta obsahuje bug. V nette/database se to projevilo, ale David to fixnul. Je jen potřeba updatnout.

7.3 přineslo pár bugů, ale od 7.3.2 už je to v pohodě. Alespoň jsem nepostřehl, že by si někdo stěžoval.

Václav Pávek
Backer | 96
+
0
-

@Milo děkuju info, jsou někde bugy související s verzí PHP sepsané?

Potvrzuji že po aktualizaci PHP na v7.3.2 a aktulizaci nette/database na v2.4.8 je vše v pořádku

Editoval Václav Pávek (27. 3. 2019 9:43)