2010-08-27 127 views
0

我们一直在一个严重的问题上工作了几个小时。mysql_num_rows返回0,但在phpMyAdmin中的相同查询返回结果

我们有以下代码:

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)); 

我们收到 “计数” 的邮件,但 “0” mysql_num_rows的结果。如果我们通过电子邮件发送查询($ q),并在phpMyAdmin中执行它,它会起作用,并且我们会得到一行结果...

任何想法?

感谢,这将是非常apperciated

+4

我拒绝帮助某人从本网站获得答案,但不参与并将答案标记为已接受 – Galen 2010-08-27 16:56:57

+1

嗨,大家好。是的,我知道还没有回答最后一个问题,但那是因为一个简单的原因:我之前在银行工作过,而且很多脚本执行在浏览器上被阻止。由于此限制,我无法验证答案或发表任何评论。我对此非常抱歉。 – Florian 2010-08-27 16:58:47

+1

@弗洛里安硬编码'$ orderID'并检查它是否成功。并开始给予这些答案的信用!你怎么了? – Frankie 2010-08-27 17:00:39

回答

3

这可能是用户xxx比你使用PMA用户更具限制性的权限的帮助。

+0

不,不可能。我们使用相同的用户 – Florian 2010-08-27 17:00:31

+0

是你所有的代码,还是你在某处覆盖'$ res'?如果您没有将'error_reporting'调整为'E_ALL',现在就执行:'error_reporting(E_ALL);'。你有任何错误? – Lekensteyn 2010-08-27 17:02:03

+0

没有错误,只是在代码之后的一些警告,这是正常的。感谢您的帮助 – Florian 2010-08-27 17:03:47

0

尝试重新措辞您的查询。我发现LEFT JOIN更容易理解和处理。

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;

如果这样不起作用,请将查询简化为订单表,并确保获得结果。如果这个作品添加了一个表格等等......

另外,我可以看到如果某个用户是一个用户而不是成员,或者反之亦然,那么会出现问题。然而,左连接样式查询可以解决这个问题。另外,我编辑查询中的表格顺序以使其更有意义。

+0

问题中使用的隐式连接语法实际上等同于内部连接,但我同意显式连接语法更可取。 – Hammerite 2010-08-27 17:38:41

+0

是的,我应该提到这一点,而且我可能会因为使用LEFT JOIN而受到重压,但在这种情况下,我认为这有助于检测空集的原因是没有匹配的成员或用户。 – 2010-08-27 17:43:49

相关问题