¿Cómo corregir el MySQL 1064 Error?

Error MySQL 1064 — mensaje exacto: 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 '...' at line N

MySQL no puede analizar el SQL que enviaste. El fragmento que aparece entre comillas marca exactamente dónde se detuvo el análisis: empieza tu diagnóstico ahí.

El error MySQL 1064 es un error de sintaxis: MySQL recibió una sentencia SQL que no pudo analizar. El mensaje de error siempre incluye el número de línea y el fragmento de consulta que provocó el fallo: ambos son tus pistas de diagnóstico más rápidas. Causas comunes:

  1. Sintaxis incorrecta: un error tipográfico, una coma faltante o una palabra clave mal colocada.
  2. Errores ortográficos: SLECT en lugar de SELECT, WHER en lugar de WHERE.
  3. Palabras reservadas: usar order, table o key como nombres de columnas o tablas sin comillas invertidas.
  4. Paréntesis sin coincidencia: un ( sin cerrar o un ) de más en una subconsulta.
  5. Datos faltantes o incorrectos: una variable de la consulta está vacía o contiene un valor inesperado.
  6. Sintaxis obsoleta: comandos de versiones anteriores de MySQL (TYPE=MyISAM, CHARSET=latin1) que fallan en servidores más nuevos.

¿Qué causa tengo?

Usa esta tabla para identificar la causa más probable antes de profundizar en las soluciones:

Tu síntoma Causa más probable Solución
El mensaje de error menciona una palabra clave SQL (ORDER, KEY, TABLE, INDEX, DATABASE) como la palabra problemática Palabra reservada usada como nombre de columna o tabla sin comillas invertidas Fix 4: Escapar las palabras reservadas
El error apunta a un número de línea cerca de un ( o ) Paréntesis sin coincidencia Fix 2: Revisar los paréntesis
El error apareció tras importar un volcado de base de datos o actualizar MySQL Sintaxis obsoleta en el volcado (TYPE=MyISAM, CHARSET=latin1) Fix 6: Actualizar los comandos obsoletos
Una consulta dinámica funcionaba antes pero ahora falla; la consulta contiene una variable PHP Valor de variable vacío o faltante Fix 5: Abordar los datos faltantes
El token problemático es una palabra clave mal escrita (SLECT, INSRET, WHER) Error ortográfico Fix 3: Corregir la ortografía
Ninguno de los anteriores: problema general de estructura de la consulta Problema de sintaxis en la estructura de la consulta Fix 1: Verificar la sintaxis

Resolver el error MySQL 1064

1. Verifica dos veces tu sintaxis

El mensaje de error de MySQL te indica la posición exacta del carácter donde se detuvo el análisis. Lee el fragmento entre comillas del error y luego revisa el SQL inmediatamente anterior a ese punto. Los problemas estructurales más comunes:

  • Falta una coma entre las definiciones de columnas en CREATE TABLE
  • Un punto y coma dentro del cuerpo de un procedimiento almacenado que termina toda la sentencia de forma prematura
  • Una palabra clave usada en la cláusula equivocada (WHERE en lugar de HAVING en una consulta de agregación)

Ejemplo antes/después — falta una coma:

-- Broken: no comma after the first column definition
CREATE TABLE users (
    id INT NOT NULL
    username VARCHAR(50)
);

-- Fixed
CREATE TABLE users (
    id INT NOT NULL,
    username VARCHAR(50)
);

2. Presta atención a los paréntesis

Cada paréntesis de apertura necesita uno de cierre que le corresponda. Las subconsultas y las cláusulas IN (...) son la fuente más común de desequilibrio de paréntesis, especialmente al editar una consulta a mano o al ensamblarla a partir de partes.

Ejemplo antes/después — subconsulta sin cerrar:

-- Broken: missing closing ) for the IN subquery
SELECT * FROM orders WHERE user_id IN (
    SELECT id FROM users WHERE active = 1
;

-- Fixed
SELECT * FROM orders WHERE user_id IN (
    SELECT id FROM users WHERE active = 1
);

3. Errores ortográficos: Un culpable común

MySQL no intenta autocorregir una palabra clave mal escrita: detiene el análisis de inmediato y devuelve un error 1064. Un solo carácter intercambiado en SELECT, INSERT, UPDATE, WHERE o cualquier otra palabra reservada lo provoca.

Ejemplo antes/después — SELECT mal escrito:

-- Broken
SLECT id, name FROM users;
-- Error: ... near 'SLECT id, name FROM users'

-- Fixed
SELECT id, name FROM users;

Un robusto SQL Syntax Checker detecta estos errores tipográficos antes de que ejecutes la consulta contra una base de datos en producción.

Verificador de sintaxis SQL
Coder’s Tool

Aquí, identifica el error y especifica la línea que contiene el error.

4. Escapa correctamente las palabras reservadas

MySQL reserva ciertas palabras para su propia sintaxis: ORDER, TABLE, KEY, INDEX, DATABASE, SELECT, FROM, WHERE y muchas otras. Usar cualquiera de ellas como nombre de tabla o columna sin comillas invertidas causa un error 1064. La solución es encerrar el identificador entre comillas invertidas.

Ejemplo antes/después — palabra reservada como nombre de tabla:

-- Broken: ORDER is a MySQL reserved word
SELECT name FROM order WHERE id = 1;
-- Error: ... near 'order WHERE id = 1'

-- Fixed: backticks tell MySQL this is an identifier, not a keyword
SELECT name FROM `order` WHERE id = 1;
SQL
CREATE TABLE `order` (...

Las distintas versiones de MySQL tienen listas de palabras reservadas diferentes. Al migrar una base de datos desde una versión anterior de MySQL, una palabra que era segura en MySQL 5.7 puede estar reservada en MySQL 8.0. Consulta el MySQL Reference Manual para tu versión de destino y ejecuta una búsqueda y reemplazo en el volcado antes de importarlo.

5. Abordar los datos faltantes

Si una variable PHP que alimenta una consulta SQL está vacía o sin definir, el SQL ensamblado queda malformado. Una consulta como WHERE id = (sin nada después del =) es una concatenación de cadenas válida en PHP pero un SQL inválido.

Ejemplo antes/después — variable vacía:

// $orderId is empty — the POST field was not submitted
$orderId = $_POST['order_id'] ?? '';

// Resulting SQL is broken:
// SELECT * FROM orders WHERE id =
$sql = "SELECT * FROM orders WHERE id = $orderId";

Valida la variable antes de construir la consulta:

// Fixed: validate before use
if (empty($orderId) || !is_numeric($orderId)) {
    return; // do not run a malformed query
}
$sql = "SELECT * FROM orders WHERE id = " . intval($orderId);

Para diagnosticar esto en un entorno WordPress en producción, abre phpMyAdmin o Adminer, ve al panel de consultas SQL y ejecuta la consulta con un valor literal conocido como correcto para confirmar que la sintaxis es correcta de forma aislada. Si pasa ahí, el problema está en cómo se rellena la variable, no en la estructura de la consulta en sí.

6. Actualizar comandos obsoletos

La sintaxis de MySQL cambia entre versiones principales. Los volcados de base de datos generados en MySQL 5.x con frecuencia contienen sintaxis que falla de inmediato en servidores MySQL 8.x. Las dos causas más comunes en las migraciones de sitios WordPress:

TYPE=MyISAM (eliminado; usa ENGINE=InnoDB):

-- Broken on MySQL 5.5+ (TYPE= keyword was removed)
CREATE TABLE wp_options (
    option_id BIGINT(20) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (option_id)
) TYPE=MyISAM;

-- Fixed
CREATE TABLE wp_options (
    option_id BIGINT(20) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (option_id)
) ENGINE=InnoDB;

DEFAULT CHARSET=latin1 en MySQL 8 estricto:

Los volcados más antiguos especifican CHARSET=latin1. En MySQL 8.0 con character_set_server=utf8mb4 y sql_mode=STRICT_TRANS_TABLES, esto puede producir un 1064 en la línea CREATE TABLE. Corrige el volcado antes de importarlo:

-- Find in the dump file:
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- Replace with:
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Según los tickets de soporte de WP STAGING, el desencadenante de 1064 más común en las migraciones de WordPress es un volcado antiguo que contiene TYPE=MyISAM: falla en el primer CREATE TABLE y aborta toda la importación. Una búsqueda y reemplazo en un editor de texto antes de ejecutar la importación lo resuelve de inmediato.

Para confirmar la versión de MySQL que ejecuta tu servidor:

SELECT VERSION();

Consulta el MySQL Reference Manual para ver una lista completa de la sintaxis eliminada y modificada entre versiones.

Manual de referencia de MySQL

Qué hacer si la solución no funciona

Si has repasado las seis causas y el error 1064 persiste, usa esta lista de verificación para aislar la causa raíz:

  1. Confirma que estás conectado a la base de datos correcta. Ejecuta SHOW TABLES; para verificar que la tabla que consultas existe y tiene exactamente el nombre que tu consulta espera, incluido el prefijo de tablas de WordPress.
  2. Verifica tu versión de MySQL:Si la sintaxis de la consulta requiere una versión de MySQL más nueva que la instalada, actualiza MySQL o reescribe la consulta para la versión instalada.
  3. Revisa el prefijo de tablas de WordPress. Las tablas de WordPress usan el prefijo definido en wp-config.php (habitualmente wp_). Una consulta que codifica wp_options de forma fija falla si el prefijo real es wpstg_ u otro.
  4. Aísla la cláusula que falla. Reduce la consulta a su forma más simple: elimina joins, subconsultas y cláusulas WHERE una a una hasta que el 1064 desaparezca. La última cláusula que eliminaste es la causa.
  5. Activa el registro de depuración de WordPress. Si el 1064 se origina en un plugin o tema, activar WP_DEBUG y WP_DEBUG_LOG captura la consulta completa con su traza de pila. Consulta cómo activar el modo de registro de depuración de WordPress: la entrada del registro nombrará la función exacta que genera la consulta malformada.

Conclusión

El error MySQL 1064 siempre se remonta a una causa específica: un error tipográfico, una palabra reservada usada sin comillas invertidas, un desajuste de paréntesis, una variable faltante o sintaxis obsoleta en un volcado de base de datos. El mensaje de error de MySQL te da el número de línea y el fragmento exacto donde falló el análisis: ese es tu punto de partida. Aplica la solución correspondiente de arriba y usa la lista de verificación de resolución de problemas si el primer intento no lo resuelve.

Artículos Relacionados

Rene Hermenau

Autor: Rene Hermenau

Sobre el autor: René Hermenau es el fundador de WP STAGING. Trabaja en copias de seguridad de WordPress, entornos de staging, migraciones, gestión de bases de datos y flujos de despliegue seguros.