2010-12-20 39 views
0

我有一個奇怪的問題,使用socialEngine數據庫類(基於zend框架)。 我寫了這樣的事情:zend基於where子句消失

$statusTable = Engine_Api::_()->getDbtable('actions', 'activity'); 
$myPosts = $statusTable->fetchAll($statusTable->select() 
    ->where('subject_id = ?',$id) 
    ->where('comment_count > ?',0) 
    ->where('type = ?',$type) 
    ->where('date > ?',$newer_than) 
    ->order('date DESC') 
    ->limit(intval($num_items))); 

它這樣的插件中提出,問題生成的查詢是財產以後的部分:

SELECT `engine4_activity_actions`.* 
FROM `engine4_activity_actions` 
WHERE (subject_id = 5) AND (comment_count > 0) AND (type =) AND (date >) 
ORDER BY `date` DESC LIMIT 10 

你可以看到,$類型和$ newer_than已經消失,即使它們有值($ type ='status',$ newer_than = '01/01/2000')

編輯: 它似乎只響應整數而不是字符串,如果我替換在查詢中顯示'0'狀態。

服務器上運行PHP 5.3.2

+2

這很奇怪。如果您爲$ type和$ newer_than( - > where('type =?','status'))硬編碼一個值就像調試步驟那樣會發生什麼。也可以在運行此查詢之前嘗試打印出$ type和$ newer_than,以驗證它們是否有值。 – 2010-12-20 17:46:08

+0

它做同樣的事情,我注意到它只發生在字符串,如果我用0替換$ type,例如值在查詢中。可能是字符串不允許或者我應該以某種方式逃脫它? – shay 2010-12-20 19:05:08

+0

將'$ type'強制轉換爲字符串。它可能無法正常工作,但試一試' - > where('type =?',(string)$ type);' – tawfekov 2010-12-20 19:43:27

回答

0

有哪個是你的論點的類型,其中()方法中的第三optionnal說法。根據你的數據庫適配器的不同,它可能會告訴Zend_Db_Select查詢構建器一件重要的事情。 所以,你可以嘗試

->where('subject_id=?',$subject,'TEXT') 

ZF API指示,以及「請注意,這是更正確使用命名綁定在查詢的不是字符串值」,這樣可以幫助查詢生成器,以獲得真正的類型的你的參數,所以你可以試試這樣:

$myPosts = $statusTable->fetchAll($statusTable->select() 
->where('subject_id=:psubject') 
(...) 
,array('psubject'=>$subject));