How to: Reparar error en el archivo upgrade.php de SMF

background_logoHace un rato estaba actualizando el foro de un cliente que tengo alojado en el servidor de windows y me salio un error que siempre me ha salido cada que actualizo SMF, la onda es que al parecer este error solo pasa en servidores bajo windows porque subí la base de datos al servidor linux de servage y funciono bien, según el error es a causa de una versión incompatible de Mysql pero el servidor donde tengo alojado este sitio tiene unos 3 o 4 días que se actualizo con  PLESK 8.6 y Phpmyadmin nuevos y antes manejaba Plesk 8.04 y un phpmyadmin mas viejos que yo pensé al principio sería por eso, pero pues parece que estaba equivocado y ahora le echo la culpa a que solo ocurre en servidores windows XD.


El error pasa al momento de querer ejecutar el archivo upgrade.php, por ejemplo:

tuweb.com/foro/upgrade.php

Una ves que se empieza a ejecutar el upgrade.php inicia todo bien, pero después de algunos pasos aparece este error.

This query:
ALTER TABLE smf_smileys
ORDER BY LENGTH(code) DESC;
Caused the error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘LENGTH(code) DESC’ at line 2

Para solucionarlo debemos hacer lo siguiente:

Buscamos las siguientes lineas en el archivo upgrade_1-1.sql

ALTER TABLE {$db_prefix}smileys
ORDER BY LENGTH(code) DESC;

y reemplazamos por estas

ALTER TABLE {$db_prefix}smileys
ORDER BY code DESC;

Ahora buscamos las siguientes lineas en el archivo /Sources/ManageSmileys.php

// Sort all smiley codes for more accurate parsing (longest code first).
db_query(”
ALTER TABLE {$db_prefix}smileys
ORDER BY LENGTH(code) DESC”, __FILE__, __LINE__);

Y reemplazamos por estas.

// Sort all smiley codes for more accurate parsing (longest code first).
db_query(”
ALTER TABLE {$db_prefix}smileys
ORDER BY code DESC”, __FILE__, __LINE__);

Una ves hecho esto ejecutamos nuevamente el archivo upgrade.php y ya no debería causar ningún error.

Espero les sea de utilidad.