我一直在使用this免费托管网站进行开发和测试。
我无法使用UPDATE
MySQL命令更改数据库值,即使允许用户使用来自cPanel的所有命令。
然后,我已经使用默认用户对其进行了测试,但它仍然无效。但是,它在我的系统上运行良好。
MySQL错误是
UPDATE command denied to user 'test'@'localhost' for table 'content'
其他命令工作正常。
为什么会这样?它怎么能被阻止?或者任何解决方案?
我非常确定用户有权使用UPDATE
命令,因为我可以将phpMyAdmin与同一用户一起使用并修改MySQL字段。
我不明白为什么来自PHP的某些MySQL命令被拒绝给予所有特权并且可以通过phpMyAdmin完成所有操作的用户。鉴于该脚本,phpMyAdmin和SQL主机位于同一服务器上。
答案 0 :(得分:30)
对于尝试回答这个问题的每个人,我都非常感谢。我找到了问题和解决方案。
我的SQL查询就像这样
UPDATE `dblayer`.`test` SET `title` = 'hello a' WHERE `test`.`id` =1;
我从phpmyadmin得到它,它在我的系统上完美运行。 但是,当我在服务器上工作时,它不起作用,它说命令被拒绝可能是因为
`dblayer`.`test`
我试图全局选择表格(或类似的东西,我不确定) 但如果我的SQL查询是
UPDATE `test` SET `title` = 'hello a' WHERE `test`.`id` =1;
它也适用于我的服务器。
答案 1 :(得分:5)
您的用户没有正确的权限。您需要授予它访问UPDATE命令的权限,如下所示:
GRANT UPDATE ON database.* TO test@'localhost' IDENTIFIED BY 'password';
如果您使用图形工具来管理数据库 - 例如PHPMyAdmin或SQLYog等 - 你应该能够使用这些工具来启用这些权限。
答案 2 :(得分:5)
正如其他人所说,这是许可问题。我相信你可能会检查,但为了以防万一。登录phpmyadmin后,运行以下命令:
SELECT USER();
如上面的所有评论所示,那应该吐出'test'@'localhost'
然后运行
SHOW GRANTS FOR 'test'@'localhost'
这应该为您提供该用户的所有权限。获得结果后,选择“选项”,“全文”,然后单击“转到”以获取全文。
确保输出中的权限具有以下内容:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON `your_database`.* TO 'test'@'localhost'
您可能无法在某些主机设置上获得GRANT ALL,但只要您获得INSERT,UPDATE,DELETE,您就一定能够更新数据
答案 3 :(得分:4)
我有同样的问题,权限是正确的,但它在某些环境中工作,而在其他环境中工作。我正在使用像
这样的表名<强> scheme.TABLE_NAME 即可。
不改变权限,只使用
table_name
适用于所有环境。
答案 4 :(得分:2)
我的sql错误是UPDATE命令拒绝用户'test'@'localhost' 表'内容'
为什么会这样?以及如何预防呢?或任何解决方案 此?
它正在发生的事情正在发生:用户test
没有对表content
的更新权限。这样的事情应该授予用户所需的权限:
GRANT UPDATE ON database.content TO test@'localhost' IDENTIFIED BY 'password';
*上面的密码只是占位符。你应该使用真实的。
答案 5 :(得分:2)
有时这是一个区分大小写的问题。
MySQL也表示即使表格不可用也拒绝访问。请确保您没有区分大小写的问题。
答案 6 :(得分:1)
某些Web主机上的UPDATE command denied
错误可能是达到MySQL数据库空间限制的结果。
答案 7 :(得分:0)
使用ip作为localhost提供对测试用户的完全访问权限。从mysql db中检查用户表。
以root身份登录并进入mysql数据库,然后进入用户表。您将找到测试用户的当前权限。
答案 8 :(得分:0)
当我为远程MySql实例(通过JawsDB)创建触发器(其中包括update子句)时,出现了此错误。
CREATE TRIGGER updateRecentDateFromProcGen
After Insert On ``mq6swfzd39ygjejl``.``proceduregeneration``
For Each Row
BEGIN
UPDATE ``mq6swfzd39ygjejl``.``users``
SET
mostRecentDateAllActivities = NEW.date
WHERE
NEW.userID = users.ID;
END
CREATE TRIGGER updateRecentDateFromProcGen
After Insert On ``mq6swfzd39ygjejl``.``proceduregeneration``
For Each Row
BEGIN
UPDATE ``users``
SET
mostRecentDateAllActivities = NEW.date
WHERE
NEW.userID = users.ID;
END
基本上,我只是在UPDATE行中删除了数据库名称,而仅保留了表名称。
答案 9 :(得分:-1)
使用mysql,你可以做到 SELECT * mysql.user
查看权限,然后更新您想要的权限。我更喜欢使用上面的命令,因为我可以看到该表中的所有选项。
UPDATE mysql.user
SET Insert_priv = 'Y',
Update_priv = 'Y'
WHERE user.Host = 'localhost' AND user.User = 'test';
更新权限后,我注意到我必须重新启动mysql服务器才能让客户端看到它们:
/etc/init.d/mysql restart
然后它会正常工作