我在MySQL和PostgreSQL中都使用了下一个SQL语句,但它在PostgreSQL中失败了
db.Query(`SELECT COUNT(*) as N FROM email WHERE address = ?`, email)
出现此错误:
pq: F:"scan.l" M:"syntax error at end of input" S:"ERROR" C:"42601" P:"50" R:"scanner_yyerror" L:"993"
有什么问题? PostgreSQL中的错误消息非常神秘。
答案 0 :(得分:36)
您尚未提供有关语言/环境的任何详细信息,但无论如何我都会尝试疯狂猜测:
MySQL的预处理语句本身使用?
作为参数占位符,但PostgreSQL使用$1
,$2
等。尝试用?
替换$1
并查看如果有效:
WHERE address = $1
PostgreSQL中的错误消息非常神秘。
总的来说,我发现Postgres错误消息比竞争产品(ahem,MySQL和尤其是 Oracle)更好,但在这种情况下,您已经设法将解析器与理智混淆。 :)
答案 1 :(得分:7)
你正在使用Go吗?
尝试:
db.Query(`SELECT COUNT(*) as N FROM email WHERE address = $1`, email)
答案 2 :(得分:0)
在golang中我们使用的查询
答案 3 :(得分:0)
在我的情况下,这是由于使用了-行注释,其中负责与数据库进行交互的程序在查询的多行中全部读取为一条大行。这意味着该行注释破坏了查询的其余部分。解决方法是改用/ *块注释* /。
答案 4 :(得分:-1)
尝试@符号它为我工作。
使用?符号:
它说"错误:42601:输入结束时的语法错误"
使用 $ 1 时:
它说"错误:42P02:没有参数$ 1"