1

DQLでクエリを書くことについて少し混乱しています。公式ドキュメントから:

$query = $em->createQuery('SELECT u FROM MyProject\Model\User u WHERE u.age > 20');

名前空間の円記号がエスケープされないのはなぜですか?
そのため、Zend Studioで警告が表示され、とにかく機能しますが、\Mも\Uも有効なエスケープシーケンスではないため、これは単なる「運」だと思います。

どう思いますか?その構文を使用しても安全ですか?または、常にDQLで「\」をエスケープする方がよいでしょうか。

$query = $em->createQuery('SELECT u FROM MyProject\\Model\\User u WHERE u.age > 20');
4

2 に答える 2

1

動的名前空間名(引用符で囲まれた識別子)は円記号をエスケープする必要があるを参照してください

最初の構文は幸運なようです。:)私は自分で試したことがないので、エスケープを使用したクエリは、エスケープを使用しないクエリと同じように機能すると言う場合は、エスケープされたクエリを使用することをお勧めします。

于 2011-08-14T09:15:59.903 に答える
0

良い点ですが、DQLはクエリを受け取り、解析されたクエリをデータベースエンジンに送信する前に、名前空間とクラスに一致します。

MyProject \ Model \ Userは、Userクラスで指定されたテーブル名に切り詰められます。

SELECT u FROM MyProject \ Model \ User u WHEREu.age>20は

SELECT u FROMuser[つまりユーザークラスで指定されたテーブル名]uWHERE u.age> 20

于 2011-08-13T01:35:29.383 に答える