使用 DQL 在命名空间中转义反斜杠(原则 2)

发布于 2024-11-29 06:36:25 字数 410 浏览 2 评论 0原文

我对用 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');

I'm a bit confused about writing queries in DQL.
From the official documentation:

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

Why the backslash of the namespace is not escaped?
I'm getting a warning in Zend Studio for that reason, and it works anyway, but I think is just "luck", because neither \M nor \U are valid escaped sequences.

What do you think? is safe to use that syntax? or is better to escape the "\" always in DQL?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凉城凉梦凉人心 2024-12-06 06:36:25

请参阅动态名称空间名称(带引号的标识符)应该escape backslash

看起来第一个语法只是幸运。 :) 我自己还没有尝试过,所以如果你说带转义的查询与不带转义的查询一样,那么最好使用转义查询。

See Dynamic namespace names (quoted identifiers) should escape backslash

Looks like the first syntax is just lucky. :) I haven't tried it myself, so if you say that query with escaping works just as query without escping, it's better use escaped queries.

梦屿孤独相伴 2024-12-06 06:36:25

好点,但 DQL 在将解析后的查询发送到数据库引擎之前,会进行查询并匹配命名空间和类。

MyProject\Model\User 被修剪为 User 类中指定的表名称。

从 MyProject\Model\User u 中选择 u,其中 u.age > 20 变为

SELECT u FROM user[即用户类中指定的表名] u WHERE
u.年龄> 20

Good point, but DQL takes query and matches to Namespace and Class before sending parsed query to database engine.

MyProject\Model\User is trim down to table name specified in User class.

SELECT u FROM MyProject\Model\User u WHERE u.age > 20 becomes

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文