Doplněk dg / MySQL-dump hlásí chybu TypeError strlen() po aktualizaci Nette na nejnovější verzi

Alsatian
Člen | 175
+
0
-

Ahoj. Poprosím vás o radu. Používám pro zálohu a obnovu databáze skvělý doplněk dg / MySQL-dump.
Po aktualizaci nette na nejnovější verzi, dříve 3.0, nyní setinkový update, mi přestalo fungovat obnovení databáze.
To provádím takto

$db = new \mysqli($this->paramDb['db_host'], $this->paramDb['db_user'], $this->paramDb['db_password'], $this->paramDb['db_name']);
$import = new \MySQLImport($db);
$import->load($sql);

A u $import->load($sql); hlásí chybu TypeError „strlen() expects parameter 1 to be string, boolean given“

Je možné, že na novou verzi Nette není prozatím rozšíření https://github.com/…QLImport.php připraveno?

Případně jaký jiný doplněk používáte vy?
Děkuji.

dakur
Člen | 493
+
0
-

@Alsatian Ahoj, zkusil bych xDebugem prokrokovat kód, pravděpodobně to spadne na řádku $s = fgets($handle), protože fgets() vrací false, pokud dojde k nějaké chybě. To $sql máš opravdu správně?

Alsatian
Člen | 175
+
0
-

dakur napsal(a):

@Alsatian Ahoj, zkusil bych xDebugem prokrokovat kód, pravděpodobně to spadne na řádku $s = fgets($handle), protože fgets() vrací false, pokud dojde k nějaké chybě. To $sql máš opravdu správně?

Ahoj, krokoval jsem a na řádku 77 (soubor src/MySQLImport.php) při čtení posledního řádku sql importního souboru je v $s proměné false, místo text řádku. Umístil jsem další provádění scriptu do podmínky a vše již funguje. Běží mi to na PHP verzi 7.2, tu jsem neměnil, ale asi došlo k nějaké typové kontrole aktualizací Nette.

Díky :)

David Grudl
Nette Core | 8218
+
0
-

Mohl bys mi ten sql soubor poslat zazipovaný emailem na david@grudl.com ? Stačí poslední část, se kterou se to takto chová.

Alsatian
Člen | 175
+
0
-

@DavidGrudl omlouvám se za dvouleté zpoždění, až nyní jsem narazil na stejnou chybu a tím na svůj příspěvek ve fóru :)

Soubor vytvářím dle Tvého návodu, jen mám „.sql“ příponu u souboru s databází.

$dump->save('nazev-souboru.sql');

Pro obnovení potom

$import->load('nazev-souboru.sql');

SQL soubor potom vypadá takto

DROP TABLE IF EXISTS `visitors_sum`;

CREATE TABLE `visitors_sum` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `day` varchar(15) CHARACTER SET utf8 NOT NULL,
  `celkem` int(11) NOT NULL,
  `uip` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=386 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE `visitors_sum` DISABLE KEYS;

INSERT INTO `visitors_sum` (`id`, `day`, `celkem`, `uip`) VALUES
(1,	'2020-01-12',	2,	2),
...
...
(385,	'2022-08-23',	3,	1);
ALTER TABLE `visitors_sum` ENABLE KEYS;



COMMIT;
-- THE END

Editoval Alsatian (23. 8. 2022 22:09)