2011-04-18 87 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提供程序可能使用相同的方法。