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 NMySQL 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:
- Sintaxis incorrecta: un error tipográfico, una coma faltante o una palabra clave mal colocada.
- Errores ortográficos:
SLECTen lugar deSELECT,WHERen lugar deWHERE. - Palabras reservadas: usar
order,tableokeycomo nombres de columnas o tablas sin comillas invertidas. - Paréntesis sin coincidencia: un
(sin cerrar o un)de más en una subconsulta. - Datos faltantes o incorrectos: una variable de la consulta está vacía o contiene un valor inesperado.
- Sintaxis obsoleta: comandos de versiones anteriores de MySQL (
TYPE=MyISAM,CHARSET=latin1) que fallan en servidores más nuevos.
Contents
¿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 (
WHEREen lugar deHAVINGen 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.

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;
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.

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:
- 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. - 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.
- Revisa el prefijo de tablas de WordPress. Las tablas de WordPress usan el prefijo definido en
wp-config.php(habitualmentewp_). Una consulta que codificawp_optionsde forma fija falla si el prefijo real eswpstg_u otro. - Aísla la cláusula que falla. Reduce la consulta a su forma más simple: elimina joins, subconsultas y cláusulas
WHEREuna a una hasta que el 1064 desaparezca. La última cláusula que eliminaste es la causa. - Activa el registro de depuración de WordPress. Si el 1064 se origina en un plugin o tema, activar
WP_DEBUGyWP_DEBUG_LOGcaptura 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.