为什么我的JOIN失败了?

时间:2011-08-11 20:35:39

标签: php mysql pdo fetch

我有一个函数来检索表示特定日期商店的销售报告的单行数据。我正在使用类似的方法在整个相同的类和应用程序中检索数据,并且从未遇到过这个问题。我的函数(和fetch())返回false,而execute()返回true。

当我从SQL编辑器在TOAD中运行相同的查询时,我按预期收到一行数据。

为什么fetch()失败了?注意:我也尝试了fetchAll(),它返回一个空集。我也尝试过不使用绑定参数,但这也不起作用。

以下是代码:

    public function getFullReport($store_id, $date)
    {
        $pdo = $this->application->database()->PDO();
        $user_id = $this->application->session()->user_id();

        $query = <<<SQL
SELECT sales_reports.*,
       labor2.hours AS labor_am,
       labor3.hours AS labor_wa,
       labor4.hours AS labor_associate,
       labor5.hours AS labor_kitchen,
       labor6.hours AS labor_training
  FROM sales_reports
       JOIN labor_reports AS labor2
          ON     sales_reports.store_id = labor2.store_id
             AND sales_reports.date = labor2.date
             AND labor2.labor_type_id = 2
       JOIN labor_reports AS labor3
          ON     sales_reports.store_id = labor3.store_id
             AND sales_reports.date = labor3.date
             AND labor3.labor_type_id = 3
       JOIN labor_reports AS labor4
          ON     sales_reports.store_id = labor4.store_id
             AND sales_reports.date = labor4.date
             AND labor4.labor_type_id = 4
       JOIN labor_reports AS labor5
          ON     sales_reports.store_id = labor5.store_id
             AND sales_reports.date = labor5.date
             AND labor5.labor_type_id = 5
       JOIN labor_reports AS labor6
          ON     sales_reports.store_id = labor6.store_id
             AND sales_reports.date = labor6.date
             AND labor6.labor_type_id = 6
       JOIN user_store_permissions
          ON sales_reports.store_id = user_store_permissions.store_id
 WHERE     sales_reports.store_id = :store_id
       AND sales_reports.date = :date
       AND user_store_permissions.user_id = :user_id
 LIMIT 1
SQL;

        $statement = $pdo->prepare($query);
        $statement->bindParam(':store_id', $store_id);
        $statement->bindParam(':date', $date);
        $statement->bindParam(':user_id', $user_id);

        $statement->execute();

        return $statement->fetch(PDO::FETCH_ASSOC);
    }

更新

由于某种原因,劳动力JOIN似乎失败了。当我使用LEFT JOIN时,它返回一行 - 所有的劳动值都为null。但是,我没有在Toad for MySQL中看到这个结果,它正确执行查询的LEFT JOIN和JOIN版本并返回整行。

所以新的问题是,为什么我的JOIN不能在我的PHP PDO代码中工作,但他们正在处理相同的数据,在Toad中运行SQL时使用相同的参数?

2 个答案:

答案 0 :(得分:0)

看起来它可能与限制语句有关。我有一个相同的问题,使用PDO和一个非常简单的连接如下。

select e.id,e.name,c.id2 
from espempdata e, espempclasses c 
where e.empClass=c.id2 limit 50

它以limit语句失败,并在没有它的情况下传递。从命令行运行它。怪异。

答案 1 :(得分:-1)

对不起 - 我很久以前就解决了这个问题而忘记回答我自己的问题,因为Relequestual建议。

我认为问题在于我在远程MySQL服务器上运行Toad SQL查询,而PHP PDO语句是在我的本地MySQL服务器上运行的。当你长时间盯着屏幕时,这是一个愚蠢的典型头像!