2014-08-28 59 views
0

我目前有一個查詢,我正在準備Zend 1.x. select查詢是一類內形成如你所期望:getDbTable() - > select() - >問題(Zend Framework 1.x)

我設置了查詢,如下所示:

// prepare query 
    $this->getDbTable()->select() 
     ->setIntegrityCheck(false) 
     ->from(array('mdt' => 'meta_data_type')) 
     ->where('id = :id') 
     ->bind(
      array(
       ':id' => $id 
      ) 
     ); 
    // report SQL for debugging 
    echo $this->getDbTable()->select()->__toString(); 

正如你所看到的,這不正是最難的查詢。但是:返回的SQL如下:

SELECT `meta_data_type`.* FROM `meta_data_type` 

任何人都可以給我任何關於如何調試這個問題嗎?這對我來說似乎是正確的。 我試着在網上跟着例子,但是考慮到我們的系統方法(坐在一個Mapper模式裏面,其中包含非標準表格命名),這不是太有幫助。參考:

僅供參考:它返回的實際數據與您對「完整數據集」中的「獲取行」操作的期望值相匹配。如:第一行格式正確。它只是不受where子句的約束(正如你所期望的那樣,它從SQL中丟失了!)。

供參考2:綁定/哪裏不是問題。如果我將整個結局更改爲:

->where('id = 2'); 

它仍然沒有在條款中顯示此內容。

回答

2

您的查詢看起來不錯,雖然這不是我用於ZF1的語法。但是,通過第二次爲回顯調用$this->getDbTable()->select(),您將輸出一個全新的查詢,而不包含任何參數。

簡單的解決辦法是將其分配給一個變量,而不是:

// prepare query 
$select = $this->getDbTable()->select() 
       ->setIntegrityCheck(false) 
       ->from(array('mdt' => 'meta_data_type')) 
       ->where('id = :id') 
       ->bind(
        array(
         ':id' => $id 
        ) 
       ); 

// report SQL for debugging 
echo $select; 
+0

所以,感謝Tim噴泉。這似乎正是問題: 原始查詢被完全覆蓋默認。好地方! +1互聯網給你。 (我提到過,這只是我的代碼的輕微簡化,此修復也適用於此) – elb98rm 2014-08-29 07:44:10