2011-06-23 155 views
0

我有以下DQL查詢:問題DQL沒有考慮?

$query = Doctrine_Query::create() 
       ->select('p.genre') 
       ->from('Profile p') 
       ->where('sf_guard_user_id = ?', 11); 

如果我$sql = $query->getSqlQuery();返回SQL語法我得到:

SELECT p.id AS p__id, p.genre AS p__genre FROM profile p WHERE (p.sf_guard_user_id = ?) 

這是不正常的。它應該是而不是

SELECT p.id AS p__id, p.genre AS p__genre FROM profile p WHERE (p.sf_guard_user_id = 11) 

如果我寫:

$query = Doctrine_Query::create() 
       ->select('p.genre') 
       ->from('Profile p') 
       ->where('sf_guard_user_id = ' . 11); 

的SQL語法是正確的。

通常DQL應該自動執行此操作。爲什麼沒有發生?

回答

3

這是如何準備聲明的作品。值將被綁定在數據庫服務器上因此,教義無法顯示查詢的真實值。

如果您使用準備好的聲明而不是真正的價值,主義會顯示一個問號。

結賬它是如何描述here

+0

其實我用這樣的:'$ ID = 11; $ query = Doctrine_Query :: create() - > select('p.genre') - > from('Profile p') - > where('sf_guard_user_id =?',$ ID);'但是resut是同樣的錯誤(顯示問號:'SELECT p.id AS p__id,p.genre AS p__genre FROM profile p WHERE(p.sf_guard_user_id =?)')。我沒有得到這個...爲什麼在DQL中,串聯工作正常並且'?'沒有? –

+0

@Ek Kosmos:你應該閱讀如何準備語句工程http://stackoverflow.com/questions/54980/how-do-prepared-statements-work找到更多的教程。你會得到我要求的 –

+0

問題是用戶11的配置文件不在數據庫中。因爲如果我檢查用戶10是否正常工作(問號被替換)。然而這是奇怪的事情,爲什麼如果用戶不存在問號不被替換?學說應該發送某種錯誤,但唯一的是他沒有改變問號...... –