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 WHERE u.age > 20 变为

SELECT u FROM user[ie table name specified in User class] u WHERE u.age > 20

于 2011-08-13T01:35:29.383 回答