2011-04-18 227 views
18

否认我有,当我选择用用户名和密码的数据,它的工作原理,但是当我在相同的用户名和密码表中插入一些数据,它显示了我的错误数据库表插入命令在MySQL

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

我使用谷歌搜索和其他人有与数据库大小相同的问题。我检查了我的数据库,当我直接去phpmyadmin插入数据到表中时,它可以工作,但是当我从PHP脚本中调用对表的查询时,它给了我错误。

+2

这可能是一个特权问题。 – Nishant 2011-04-18 05:48:37

+0

检查授权所有特权的mysql帐户的权限 – Harish 2011-04-18 05:50:41

+0

向我们显示您的PHP代码。这很可能是一个特权问题。该脚本需要以具有INSERT INTO表(或所有数据库)的权限的用户身份登录到MySQL。 – 2011-04-18 05:55:18

回答

15

这是一个权限问题。登录到具有应用程序正在运行,并且用户的MySQL提示,输入此查询:

SHOW GRANTS; 

这将显示您的权限(在MySQL发言grants),目前的用户有。我的猜测是你不会看到给定表的INSERT权限。您需要root用户才能通过运行此查询向您授予权限:

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

我在我的phpmyadmin中运行查询,它给了我错误。 '#1142 - GRANT命令对用户'uname'@'localhost'拒绝表'tablename' ' – 2011-04-18 06:08:56

+0

好吧,您没有权限查看您的权限。您必须以root身份登录才能检查,或联系管理您托管的人员并提问。 – 2011-04-18 14:55:05

19

将我的站点从一个托管帐户移动到另一个托管帐户后,我遇到了类似的问题。该问题是由引用旧数据库的SQL查询(INSERT)引起的。用新的数据库名称替换旧的数据库(或者完全删除数据库名称)解决了这个问题。但是这个错误让我的托管公司的支持人员难倒了。

例子:

INSERT INTO old_db_name.table_name () VALUES(); 

更改为:

INSERT INTO new_db_name.table_name () VALUES (); 

希望这有助于和有意义。

+0

你不会相信这很容易搞砸了,特别是如果你的托管公司坚持前缀表! – Sydwell 2015-05-10 21:38:14

2

在您的查询中,您可能正在使用名称为“INSERT INTO DB_NAME.table_name ...”的数据库名称的表名,您的数据库用户没有DB_NAME的插入权限。所以这个错误即将到来,因为查询指向另一个数据库的表。

您需要删除数据库名称或使用正确的数据库名称。

-1

确保您有到数据库的开放连接。

如果您有用于数据库连接和插入值的单独函数,请检查数据库连接是否打开。

3

这也发生在我身上,问题是当你在php文件中调用INSERT命令时,你必须指定另一个数据库。

总之,寻找到你的INSERT命令,并检查部分your_database_name下面

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

这可能会解决你的问题。当然,如果所有权限都授予您。

4

检查你的SQL代码。

而只是删除dbName,如果你有。

例子:

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

更改为:

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

感谢的人,小步骤解决我的问题。 – 2017-06-05 03:40:27

0

我有同样的问题。

我们托管的mysql提供程序在达到最大数据库容量时删除了插入权限。

使用MySQL中

SHOW GRANTS; 

命令(在回答上述)帮我想出解决办法。

我们使用JAWS DB MYSQL,但其他托管mysql提供程序可能使用相同的方法。