【问题标题】:mysql_num_rows returns 0, but the same query in phpMyAdmin return resultsmysql_num_rows 返回 0,但 phpMyAdmin 中的相同查询返回结果
【发布时间】:2010-08-27 16:53:51
【问题描述】:

我们已经为一个严重的问题工作了几个小时。

我们有以下代码:

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('xxx@xxx.com','test',mysql_error());
}

mail("xxx@xxx.com", "count",  mysql_num_rows($res));

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

有什么想法吗?

非常感谢您的帮助

【问题讨论】:

  • 我拒绝帮助从本网站获得答案但不参与并将答案标记为已接受的人
  • 大家好。是的,我知道最后一个问题没有回答,但原因很简单:我以前在一家银行工作过,许多脚本执行在浏览器上被阻止。由于这个限制,我无法验证答案或发布任何 cmets。我真的很抱歉。
  • @Florian 硬编码$orderID 并检查结果是否正常。并开始为这些答案提供信用!你怎么了?
  • 我们尝试硬编码 $orderID,同样的问题。我开始给予信任。冷静的人!
  • 您可以访问该服务器上的 mysql 控制台吗?最好尝试其中的查询,而不是通过 phpmyadmin。引起问题的事情少了一件。

标签: php mysql phpmyadmin mysql-num-rows


【解决方案1】:

用户 xxx 可能比您用于 PMA 的用户具有更多限制性权限。

【讨论】:

  • 不,不可能。我们使用相同的用户
  • 这是你所有的代码,还是你在某处覆盖$res?如果您还没有将error_reporting 调整为E_ALL,请立即执行:error_reporting(E_ALL);。你有任何错误吗?
  • 没有错误,只是后面的代码有一些警告,这是正常的。感谢您的帮助
【解决方案2】:

尝试重新措辞您的查询。我发现 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;

如果这不起作用,请将查询减少到仅订单表,并确保您得到结果。如果可行,请添加表格等...

另外,如果订单是由用户而不是会员下的,我可以看出哪里会出现问题,反之亦然。然而,左连接样式查询可以解决这个问题。此外,我编辑了查询中表的顺序以使其更有意义。

【讨论】:

  • 问题中使用的隐式连接语法实际上等同于内连接,但我同意显式连接语法更可取。
  • 是的,我应该提到这一点,而且我可能会对使用 LEFT JOIN 感到手忙脚乱,但在这种情况下,我认为这将有助于检测空集的原因是否是'不是匹配的成员或用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 2012-12-18
  • 2015-01-13
  • 2016-11-18
  • 1970-01-01
  • 2018-10-29
相关资源
最近更新 更多