2011-08-11 46 views
0

我有一個函數可以檢索表示特定日期的商店的銷售報告的單行數據。我使用類似的方法來檢索整個相同類和應用程序中的數據,並且從未遇到過這個問題。我的函數(和fetch())返回false,而execute()返回true。爲什麼我的JOIN失敗?

當我運行從SQL編輯器蟾蜍相同的查詢,我得到的數據行早在預料。

爲什麼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); 
    } 

UPDATE

看來,勞動JOIN的是失敗的某些原因。當我使用LEFT JOIN時,它返回一行 - 所有人工值都爲空。但是,我沒有在Toad for MySQL中看到這樣的結果,它會正確執行查詢的LEFT JOIN和JOIN版本並返回完整的行。

因此,新的問題是,爲什麼我不能加入我的PHP代碼PDO工作,但他們正在運行在蟾蜍SQL當工作在相同的數據,使用相同的參數?

+0

(可能是)相關:[如何從PDO擠出錯誤消息?](http://stackoverflow.com/q/3726505) –

+0

初看起來......你的'$ date'值是什麼樣的?它是否被格式化爲mysql'yyyy-mm-dd'字符串?或者它是一個PHP時間戳? –

+0

**已解決** 我在生產服務器上而不是在我的開發服務器上愚蠢地運行我的Toad查詢。生產服務器有更多的數據。 因此,原來問題的答案是我應該使用LEFT JOIN而不是JOIN。 –

回答

-1

對不起 - 我很長時間以前解決了這個,忘了回答我的問題作爲Relequestual建議。

我相信這個問題是我在我的遠程MySQL服務器上運行的蟾蜍SQL查詢,而PHP PDO發了斷我的本地MySQL服務器的運行。當你盯着屏幕太久時,一個愚蠢,典型的頭腦風暴!

0

它看起來可能有限制語句來完成。使用PDO進行非常簡單的連接,我遇到了同樣的問題,如下所示。

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

它與限制語句失敗,並通過沒有它。從命令行運行它。奇怪的。