2011-04-18 33 views
18

Tengo una tabla de base de datos de la que, al seleccionar datos con nombre de usuario y contraseña, que funciona, pero cuando inserto algunos datos de esa tabla con el mismo nombre de usuario y la contraseña que me muestra el errorcomando insert negado en MySQL

INSERT command denied to user 'username'@'localhost' for table 'tablename' 

Busqué usando Google y alguien más tuvo el mismo problema con el tamaño de db. Comprobé mi DB y cuando voy directamente a phpmyadmin para insertar datos en la tabla, funciona, pero cuando llamo una consulta a la tabla desde un script PHP, me da el error.

+2

Podría ser un problema de privilegio. – Nishant

+0

verificar el permiso de la cuenta mysql otorgar todos los privilegios – Harish

+0

Muéstranos tu código PHP. Es muy probable que sea un problema de privilegio. La secuencia de comandos debe iniciar sesión en MySQL como un usuario que tiene el privilegio de INSERTAR EN la tabla (o en toda la base de datos). –

Respuesta

15

Este es un problema de permisos. Entrar en un indicador de MySQL con el usuario de la aplicación se está ejecutando como e introduzca la siguiente consulta:

SHOW GRANTS; 

Esto le mostrará los privilegios (grants en MySQL-hablar) que el usuario actual tiene. Supongo que no verás los privilegios INSERT para la tabla dada. Necesitará el usuario root para que le conceda permiso de ejecución de esta consulta:

GRANT INSERT ON 'db'.'tablename' TO 'username'@'localhost' 
+0

ejecuto la consulta en mi phpmyadmin y me da el error. '# 1142 - Mandato GRANT denegado al usuario 'uname' @ 'localhost' para la tabla 'tablename' ' –

+0

Ok, no tiene permiso para ver sus permisos. Tendrás que iniciar sesión como root para verificar, o contactar a quien sea que administre tu hosting y preguntar. –

19

tuve un problema similar después de mover mi sitio de una cuenta de alojamiento a otro. El problema fue causado por una consulta SQL (INSERT) que hacía referencia a la base de datos anterior. reemplazar el antiguo db por el nuevo nombre db (o simplemente eliminar el nombre db por completo) resolvió el problema. Pero este error dejó perplejos a la gente de soporte de mi empresa de hosting.

Ejemplo:

INSERT INTO old_db_name.table_name () VALUES(); 

cambiado a:

INSERT INTO new_db_name.table_name () VALUES (); 

Espero que esto ayude y tiene sentido.

+0

No lo creerá tan fácil estropear esto especialmente si su compañía de alojamiento web insiste en la tabla de prefijos. – Sydwell

2

En su consulta puede estar utilizando el nombre de la tabla con el nombre de la base de datos "INSERT INTO DB_NAME.table_name ..." donde el usuario de la base de datos no tiene permisos de inserción para DB_NAME. Entonces, este error viene porque la consulta apunta a la tabla de otra base de datos.

Debe eliminar el nombre de la base de datos o usar el nombre correcto de la base de datos.

-1

Asegúrese de tener una conexión abierta a la base de datos.

Si tiene funciones separadas para la conexión de la base de datos y para los valores de inserción, compruebe que la conexión de la base de datos esté abierta o no.

3

Esto también me pasó a mí y el problema es que cuando llamas al comando INSERT en tu archivo php debes haber especificado otra base de datos.

En resumen, se encuentran en su comando INSERT es y comprobar la parte de abajo your_database_name

"INSERT INTO \`your_database_name\`.\`your_table_name\` 

que podrían resolver su problema. Por supuesto, si se le otorgan todos los privilegios.

4

Compruebe su código SQL.

Y simplemente elimine dbName si tiene.

Ejemplo:

insert into `dbName`.`tableName` (columns) values (values); 

Cambiar a:

insert into `tableName` (columns) values (values); 
+0

gracias, pequeño paso para resolver mi problema. –

0

yo sólo tenían el mismo problema.

Nuestro proveedor de mysql alojado eliminó el permiso de inserción cuando se alcanzó el volumen de db máximo.

Usando el comando

SHOW GRANTS; 

(mencionado en la respuesta anterior) en mysql me ayudó a resolver esto.

Utilizamos JAWS DB MYSQL, pero otros proveedores de mysql hospedados pueden usar el mismo método.