2010-08-27 5 views
0

Nous travaillons depuis quelques heures sur un problème sérieux.mysql_num_rows renvoie 0, mais la même requête dans phpMyAdmin renvoie les résultats

Nous avons le code suivant:

mysql_connect("localhost","xxx","xxx") or die(mysql_error()); 
mysql_select_db("xxxe"); 

$q = "SELECT m.id, m.expired_date, u.email 
    FROM jos_osemsc_member m, jos_osemsc_orders o, jos_users u 
    WHERE o.order_id = $orderID 
    AND m.member_id = o.user_id 
    AND u.id = o.user_id"; 

$res = mysql_query($q); 

if (!$res) { 
    mail('[email protected]','test',mysql_error()); 
} 

mail("[email protected]", "count", mysql_num_rows($res)); 

Nous recevons le courrier "compter", mais avec "0" pour résultat de mysql_num_rows. Si nous envoyons la requête ($ q) par e-mail, et l'exécutons dans phpMyAdmin, cela fonctionne et nous obtenons une ligne résultat ...

Des idées?

Merci pour l'aide qui sera très apperciated

+4

Je refuse d'aider quelqu'un qui obtient des réponses de ce site mais ne participe pas et ne marque pas les réponses comme acceptées – Galen

+1

Salut les gars. Oui je sais que je n'ai pas répondu à la dernière question, mais c'est pour une raison simple: j'ai travaillé dans une banque auparavant, et de nombreuses exécutions de scripts ont été bloquées sur les navigateurs. Et je ne pouvais pas valider une réponse ou poster des commentaires à cause de cette restriction. Je suis vraiment désolé pour ça. – Florian

+1

@Florien code dur '$ orderID' et vérifier s'il s'avère que oui. Et COMMENCEZ À DONNER DU CRÉDIT POUR CES RÉPONSES! Quel est ton problème? – Frankie

Répondre

3

Il est possible que l'utilisateur xxx dispose des autorisations plus restrictives que l'utilisateur que vous utilisez pour PMA.

+0

Non, impossible. Nous utilisons les mêmes utilisateurs – Florian

+0

Est-ce tout votre code, ou êtes-vous en train d'écraser '$ res' quelque part? Si vous n'avez pas réglé 'error_reporting' sur' E_ALL', faites-le maintenant: 'error_reporting (E_ALL);'. Avez-vous des erreurs? – Lekensteyn

+0

Il n'y a aucune erreur, juste quelques avertissements dans le code après, ce qui est normal. Merci pour l'aide – Florian

0

Essayez de reformuler votre requête. Je trouve LEFT JOINs beaucoup plus facile à comprendre et à gérer.

SELECT m.id, m.expired_date, u.email 
FROM jos_osemsc_orders AS o 
     LEFT JOIN jos_osemsc_member AS m ON (m.member_id = o.user_id) 
     LEFT JOIN jos_users AS u ON (u.id = o.user_id) 
WHERE o.order_id = $orderID;

Si cela ne fonctionne pas, réduisez la requête à la table des commandes et assurez-vous d'obtenir un résultat. Si cela fonctionne ajouter une table, etc ...

En outre, je peux voir où il y aurait un problème si une commande a été passée par quelqu'un qui était un utilisateur mais pas un membre, ou vice versa. Cependant, la requête de style de jointure gauche résoudrait ce problème. Aussi, j'ai édité l'ordre des tables dans la requête pour avoir plus de sens.

+0

La syntaxe de jointure implicite utilisée dans la question est en fait équivalente à une jointure interne, mais je suis d'accord que la syntaxe de jointure explicite est préférable. – Hammerite

+0

Oui, j'aurais dû le mentionner, et je pourrais être sévère avec mon utilisation de LEFT JOINs, mais dans ce cas je pense que cela aiderait à détecter si la raison de l'ensemble vide était qu'il n'y avait pas de membre ou d'utilisateur correspondant . –

Questions connexes