【问题标题】:Propel (PostgreSQL) syntax error at or near "."在“。”处或附近推进 (PostgreSQL) 语法错误。
【发布时间】:2013-03-06 00:13:39
【问题描述】:

我建立了一个数据库(目前只有两个表:user 和 email)并与 Propel 集成。注册用户时,我会检查以确保电子邮件不存在(作为电子邮件表中的当前电子邮件或用户数据库中的原始电子邮件)。

为了简单地使用推进器来做到这一点,我使用以下方法:

if(EmailQuery::create()->filterByCurrent(TRUE)->findOneByEmailAddress($email) != NULL) {
    // email address being used currently
} else if(UserQuery::create()->findOneByOriginalEmail($email) != NULL) {
    // email address claimed on account already
}

第一个查询运行正常,但第二个查询生成并报错:Syntax error: 7 ERROR: syntax error at or near "." Propel 生成的 SQL 查询如下所示:

SELECT user.id, user.original_email, user.password, user.accept_terms, user.paid, user.customer_id, user.trial_end, user.created_at, user.updated_at, user.ip_address FROM user WHERE user.original_email=:p1 LIMIT 1

如果我将其复制并粘贴到 phpPgAdmin 中,它会返回相同的错误(并指向用户和列之间的每个 .)。我是 PostgreSQL 的新手,我缺少一些语法吗?我使用过的所有其他 Propel 查询构建器都可以顺利运行。

【问题讨论】:

  • user 可能是保留字;试试"user".(whatever)
  • @minitech 成功了,我将重命名我的表。您可以将此添加为答案,以便我选择您吗?
  • @minitech: 不是可能:

标签: php postgresql propel


【解决方案1】:

minitech的评论回复。

user 是保留的 ANSI SQL 术语。要么必须使用SELECT "user".id FROM "user",要么必须重命名表。我将表重命名为account,一切正常。

【讨论】:

  • 为了清楚起见,这必须是 PostgreSQL 保留字,因为我可以在 MySQL 中使用不带引号的user。此外,您 (@Sam) 可能希望将其添加为 issue in Propel。 (似乎可以通过在生成的SQL中引用表名来解决。)
  • 将更新我的答案并将其添加为问题,感谢您提供额外信息。这绝对是一个令人讨厌的调试错误,Propel 可以避免。
  • @jakerella:根据 ANSI SQL,这是一个保留字
  • @a_horse_with_no_name:您能提供文档链接吗?它是否在规范中是一回事,但在实践中,MySQL 似乎没有保留它(或者足够聪明,知道它何时不被用作关键字)。实际上,这应该作为 Propel 错误提交,生成的 SQL 应该引用表名(以及相关的字段名)。
猜你喜欢
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
相关资源
最近更新 更多