2011-06-23 5 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

これは、準備されたステートメントの仕組みです。値はデータベースサーバーにバインドされます。したがって、doctrineはクエリで実際の値を表示できません。

実際の値ではなく、prepared statementを使用すると、Doctrineは疑問符を表示します。それはhere

+0

を説明する方法を

アウト実は私はそのように使用: '$ ID = 11; ( 'sf_guard_user_id =?'、$ ID); 'しかし、resutは以下のようになります:$ query = Doctrine_Query :: create() - > select( 'p.genre') - > from( 'Profile p') - >同じエラー(疑問符を表示しています: 'SELECT p.id AS p __id、p.genre AS p__genre FROM profile p WHERE(p.sf_guard_user_id =?)')。私はこれを取得しません...なぜDQLの連結でOKと '? ' –

+0

@Ek Kosmos:準備文がどのように動作するのかを知る必要がありますhttp://stackoverflow.com/questions/54980/how-do-prepared-statements-workこれについてもう少しチュートリアルを見つけてください。あなたは私が求めているものを得るでしょう –

+0

問題は、ユーザー11のプロファイルがデータベースにないことでした。ユーザー10が正しく動作しているかどうかを確認すると(疑問符が置き換えられます)。しかし、これは奇妙なことですが、なぜユーザーが存在しない場合、疑問符は置き換えられませんか? Doctrineはある種のエラーを出さなければなりませんが、唯一のことは疑問符を変更していないということだけでした... –

関連する問題