3

backand.com如果尚未使用电子邮件,我正在使用查询尝试在用户表中创建记录:

INSERT INTO users (email, firstName, lastName, password)
SELECT * FROM (SELECT '{{email}}', 'test', 'person', '{{password}}') AS tmp
WHERE NOT EXISTS (
    SELECT email FROM users WHERE email = '{{email}}'
) LIMIT 1;

它验证了,但是当我使用参数运行它时:

email: dave@gmail.com
password: test

我得到错误:

出现错误,请重试或联系管理员。错误详细信息:重复的列名“测试”

为什么会失败?我不明白。

谢谢。

4

1 回答 1

3

问题是您将'test'其用作密码,因为您已经拥有'test'名字。由于您没有提供列别名,因此常量值的字段名称来自常量本身。解决方案:为子选择中的所有 4 个字段提供显式别名:

SELECT '{{email}}' as email, 'test' as firstName, 'person' as lastName, '{{password}}' as pwd
于 2016-03-07T14:12:21.930 回答