From 12dfdd5fed62df8c2c70913f0e9b2c4a8887beb9 Mon Sep 17 00:00:00 2001 From: Jordan Diaz Date: Tue, 22 Sep 2026 16:41:02 +0000 Subject: [PATCH] feat(core): las tablas nuevas del CMS nacen en InnoDB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Los dos sitios que crean tablas en caliente las creaban MyISAM: la funcion `createMissingSchemaTablesAndFields()` (cada seccion o tabla nueva del CMS) y la instalacion de plugins con tablas preset. Parecian codigo muerto porque usan `mysql_query`, que PHP 8 elimino, pero estan vivos: hay un shim en cms/lib/mysql.php que lo mapea a mysqli. Sin esto, cambiar el molde de las webs nuevas no servia de nada: la primera tabla que alguien creara desde el CMS volvia a nacer MyISAM y el molde se degradaba solo con el uso. InnoDB da recuperacion ante caida (MyISAM se corrompe con un OOM o un apagon y hay que repararlo a mano) y bloqueo por fila. El sql_mode de Forge ya no es estricto, asi que los INSERT parciales del CMS —AcaiAPI no rellena `dragSortOrder` ni los checkboxes— siguen colando con un aviso igual que con MyISAM, en vez de fallar con el error 1364. No toca ninguna tabla existente: solo el motor de las que se creen a partir de ahora. Contexto completo en docs/motor-innodb.md del repo de Forge. Co-Authored-By: Claude Opus 5 (1M context) --- cms/lib/database_functions.php | 7 ++++++- cms/lib/plugins/index.php | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/cms/lib/database_functions.php b/cms/lib/database_functions.php index d6a23fa..313461f 100755 --- a/cms/lib/database_functions.php +++ b/cms/lib/database_functions.php @@ -74,7 +74,12 @@ function createMissingSchemaTablesAndFields() { $mysqlTableName = $TABLE_PREFIX . $tableName; if (!in_array($mysqlTableName, $mysqlTables)) { notice("Creating MySQL table for schema table: $tableName
\n"); - $result = mysql_query("CREATE TABLE `".mysql_real_escape_string($mysqlTableName)."` (num int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (num)) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;"); + // InnoDB (antes MyISAM): las tablas nuevas nacen con recuperacion + // ante caida y bloqueo por fila. El sql_mode de Forge no es + // estricto, asi que los INSERT parciales del CMS (AcaiAPI no + // rellena dragSortOrder ni los checkboxes) siguen colando igual + // que con MyISAM. Ver docs/motor-innodb.md del repo de Forge. + $result = mysql_query("CREATE TABLE `".mysql_real_escape_string($mysqlTableName)."` (num int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (num)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"); if (!$result) { alert("Error creating MySQL table: $mysqlTableName
\MySQL error was: ". htmlspecialchars(mysql_error()) . "\n"); } } diff --git a/cms/lib/plugins/index.php b/cms/lib/plugins/index.php index a962a3f..9304024 100644 --- a/cms/lib/plugins/index.php +++ b/cms/lib/plugins/index.php @@ -210,7 +210,7 @@ function addTablePlugin($path,$file) { $result = mysql_query("CREATE TABLE `".mysql_real_escape_string($tableNameWithPrefix)."` ( num int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (num) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"); + ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); if (!$result) { print "Error creating MySQL table.\n\nMySQL error was: ". htmlspecialchars(mysql_error()) . "\n"; exit;