2011-06-23 88 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是否正常工作(问号被替换)。然而这是奇怪的事情,为什么如果用户不存在问号不被替换?学说应该发送某种错误,但唯一的是他没有改变问号...... –