J'utilise ce site d'hébergement gratuit pour le développement et les tests.
Je ne pouvais pas utiliser une commande MySQL UPDATE
pour modifier les valeurs de la base de données, même si l'utilisateur est censé être autorisé à utiliser toutes les commandes de cPanel.
Ensuite, j'ai testé la même chose avec un utilisateur par défaut, cela ne fonctionnera toujours pas. Cependant, cela fonctionne bien sur mon système.
L'erreur MySQL est
UPDATE command denied to user 'test'@'localhost' for table 'content'
D'autres commandes fonctionnent bien.
Pourquoi cela arrive-t-il? Et comment cela peut-il être empeché? Ou une solution pour cela?
Et je suis très sûr que les utilisateurs ont la permission d'utiliser la commande UPDATE
car je peux utiliser phpMyAdmin avec le même utilisateur et modifier les champs MySQL.
Je ne comprends pas pourquoi certaines commandes MySQL de PHP sont refusées pour un utilisateur qui a reçu tous les privilèges et peut tout faire via phpMyAdmin. Étant donné que le script, phpMyAdmin et l'hôte SQL sont sur le même serveur.
Je remercie sincèrement tous ceux qui ont essayé de répondre à cette question. J'ai trouvé le problème et la solution.
ma requête SQL est comme ça
UPDATE `dblayer`.`test` SET `title` = 'hello a' WHERE `test`.`id` =1;
que j'ai obtenu de phpmyadmin et cela fonctionne parfaitement sur mon système. Mais quand je travaille sur les serveurs ça ne marche pas et ça dit que la commande refusée peut être parce que
`dblayer`.`test`
J'essaie de sélectionner la table globalement (ou quelque chose comme ça, je ne suis pas sûr) mais si ma requête SQL est
UPDATE `test` SET `title` = 'hello a' WHERE `test`.`id` =1;
cela fonctionne aussi sur mon serveur.
Comme tout le monde l'a dit, c'est un problème de permission. Je suis sûr que vous avez probablement vérifié, mais juste au cas où. Après vous être connecté à phpmyadmin, exécutez ce qui suit:
SELECT USER();
Cela devrait cracher "test" @ "localhost" comme indiqué dans tous les commentaires ci-dessus
Exécutez ensuite
SHOW GRANTS FOR 'test'@'localhost'
Cela devrait vous donner tous les privilèges pour cet utilisateur. Lorsque vous obtenez des résultats, sélectionnez "Options", Texte intégral et cliquez sur OK pour obtenir le texte intégral.
Assurez-vous que les autorisations dans la sortie ont quelque chose comme ça:
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'
Vous ne pourrez peut-être pas obtenir GRANT ALL sur certaines configurations d'hébergement, mais tant que vous obtenez INSERT, UPDATE, DELETE, vous devriez certainement pouvoir mettre à jour les données
Votre utilisateur n'a pas les bonnes autorisations. Vous devez lui donner accès à la commande UPDATE, comme ceci:
GRANT UPDATE ON database.* TO test@'localhost' IDENTIFIED BY 'password';
Si vous utilisez un outil graphique pour gérer la base de données - par exemple PHPMyAdmin ou SQLYog, etc. - vous devriez également pouvoir utiliser ces outils pour activer ces autorisations.
J'ai eu le même problème, l'autorisation était correcte mais cela fonctionnait dans certains environnements et pas dans d'autres. J'utilisais un nom de table comme
schéma.TABLE_NAME.
Sans changer l'autorisation mais en utilisant simplement
nom_table
travaillé dans tous les environnements.
Parfois, c'est un problème sensible à la casse.
MySQL dit également que l'accès est refusé même si la table n'est pas disponible. Veuillez vous assurer que vous n'avez aucun problème sensible à la casse.
UNE UPDATE command denied
une erreur peut sur certains hébergeurs résulter de l'atteinte de la limite d'espace de la base de données MySQL.
l'erreur my sql est une commande UPDATE refusée à l'utilisateur 'test' @ 'localhost' pour la table 'content'
pourquoi cela arrive-t-il? Et comment l'empêcher? Ou une solution pour cela?
C'est ce qui se passe pour ce qu'il dit: l'utilisateur test
n'a pas d'autorisations de mise à jour sur la table content
. Quelque chose comme ça devrait accorder à l'utilisateur l'autorisation requise:
GRANT UPDATE ON database.content TO test@'localhost' IDENTIFIED BY 'password';
* le mot de passe ci-dessus est juste un espace réservé. Vous devez utiliser le vrai.
Cette erreur s'est produite pour moi lorsque je créais des déclencheurs, qui comprenaient une clause de mise à jour, pour l'instance MySql distante (via JawsDB).
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
Fondamentalement, je viens de supprimer le nom de la base de données dans la ligne UPDATE et de laisser le nom de la table par lui-même.
Fournissez l'accès complet pour tester l'utilisateur avec ip en tant que localhost.Check la table utilisateur à partir de mysql db.
Connectez-vous en tant que root et entrez dans la base de données mysql, puis dans la table utilisateur.Vous trouverez les privilèges actuels de votre utilisateur de test.