Page 1 sur 1

Requête qui ne s'exécute pas en PHP

Posté : 21 mars 2008, 17:28
par abelthorne
Bonjour,
J'ai un problème assez bizarre avec l'exécution de requêtes MySQL en PHP.

Je suis en train de gérer des utilisateurs d'un site via un backoffice. J'affiche donc une page avec des fiches décrivant les utilisateurs : une fiche pour chacun avec des boutons modifier/supprimer et une fiche vierge avec un bouton ajouter.
En local, tout marche bien. Par contre, une fois le site en ligne, PHP n'arrive pas à exécuter les requêtes de type UPDATE, DELETE et INSERT. Les requêtes SELECT marchent puisque je peux afficher les infos des utilisateurs récupérées dans la BdD, mais dès que je veux modifier/supprimer/ajouter ces infos, ça plante.

Mes fonctions fonctionnent sur ce modèle :

Code : Tout sélectionner

$query="[ma requête SQL]"; $result=mysql_query($query) or die("Opération impossible : $query");
Lorsque je veux modifier mes infos, je me retrouve avec le message d'erreur "Opération impossible : [ma requête SQL]". Le plus bizarre, c'est que la requête est correcte et que si je fais du copier-coller pour aller l'exécuter dans PHPMyAdmin, elle passe comme une fleur.

La seul explication à peu près rationnelle qui me vienne à l'esprit, c'est que PHP n'a pas les droits en écriture sur la base. Comment le vérifier et, auquel cas, le changer ?

Re: Requête qui ne s'exécute pas en PHP

Posté : 21 mars 2008, 17:37
par h0_noMan
$query="[ma requête SQL]";
$result=mysql_query($query) or die('Query : '.$query.'<br/>Erreur : '.mysql_error());
Comme cela tu auras aussi l'erreur générer par MYSQL.

Posté : 21 mars 2008, 18:04
par abelthorne
Ah ben ça confirme mon hypothèse : voilà ce que je reçois comme erreur : DELETE command denied to user 'xxx'@'xxx.xxx.xxx.xxx' for table 'bcms_user'.

Et l'explication est tout simple : ce n'est pas le bon utilisateur qui exécute la commande.

Voilà le problème avec un peu plus d'explications : pour mes tests, je gère deux bases de données différentes, avec chacune leur utilisateur. Tout marche bien en local vu que j'ai un seul utilisateur pour toutes mes bases (XAMPP).

Voici comment je procède :
1. J'ouvre une connexion vers la BdD du back office (gestion des utilisateurs, etc.)
2. J'ouvre une connexion vers la BdD annexe (gestion du contenu d'un site).
Si je pige bien, ma première connexion est virée par la seconde et, malgré le fait que dans mes requêtes je précise bien quelle base utiliser (au cas où des tables aient le même nom dans plusieurs bases), elles se font toutes via la dernière connexion ouverte, d'où le problème d'utilisateur lorsqu'il s'agit d'écrire dans la base liée à la première connexion.

Est-ce que je dois impérativement utiliser une seule connexion (et donc une seule base de données, ce qui de toute façon est prévu) ?
Est-ce que je peux "mélanger" plusieurs connexions à des bases et faire en sorte que telle ou telle fonction s'exécute avec le bon utilisateur selon la base sur laquelle elle agit ?