How do I check users email isn#39;t already in my database when submitting a form?(提交表单时,如何检查用户的电子邮件是否不在我的数据库中?)
问题描述
这是我在这里的第一个问题,因此对于任何错误,我深表歉意。 我正在构建一个测试,用户可以在其中登录,然后重新参加测试。但是,当用户提交表单时,我不确定如何检查电子邮件是否已在我的MariaDB中。
我见过一些使用嵌套查询的类似示例,我不确定这在这里是否适用,或者它是否是良好的实践。
/*User info POST*/
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/user-info', (req, res) => {
var first_name = req.body.first_name;
var last_name = req.body.last_name;
var email = req.body.email;
var sql = `INSERT INTO Govt_profiles
(
First_Name, Last_Name, Email
)
VALUES
(
?,?,?
)`;
pool.query(sql, [first_name, last_name, email], (err, data) => {
if (err) throw err;
console.log("User submition success!");
});
res.redirect('/questions');
});
我试过蒂姆的建议(谢谢!)不管我现在有什么错误,我肯定我忘了什么。这是我的错误:
UnhandledPromiseRejectionWarning:错误:位置4处的参数未设置 SQL:插入到GOVT_PROFILES(First_Name、Last_Name、Email) 选择?、?、? 不存在的位置(从GOVT_PROFILES中选择1,其中电子邮件=?)这是我的更新代码:
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/user-info', (req, res) => {
var first_name = req.body.first_name;
var last_name = req.body.last_name;
var email = req.body.email;
var sql = `INSERT INTO Govt_profiles (First_Name, Last_Name, Email)
SELECT ?, ?, ?
WHERE NOT EXISTS (SELECT 1 FROM Govt_profiles WHERE Email = ?)`;
pool.query(sql, [first_name, last_name, email], (err, data) => {
if (err) throw err;
console.log("User submition success!");
});
res.redirect('/questions');
});
推荐答案
一种选择是使用INSERT INTO ... SELECT
在实际插入之前检查电子邮件是否存在:
INSERT INTO Govt_profiles (First_Name, Last_Name, Email)
SELECT ?, ?, ?
WHERE NOT EXISTS (SELECT 1 FROM Govt_profiles WHERE Email = ?);
然后您可以检查受影响的行数,如果为零,则您将知道出了问题。
如果可以更改数据库结构,还可以尝试在Email
列中添加唯一索引:
ALTER TABLE Govt_profiles ADD CONSTRAINT email_unique UNIQUE (Email);
使用此方法,尝试使用已存在的电子邮件插入记录将导致Node.js代码出错。
更新到您最近的编辑:
您需要绑定电子邮件两次,因为它在两个?
占位符中出现了两次:
var sql = `INSERT INTO Govt_profiles (First_Name, Last_Name, Email)
SELECT ?, ?, ?
WHERE NOT EXISTS (SELECT 1 FROM Govt_profiles WHERE Email = ?)`;
pool.query(sql, [first_name, last_name, email, email], (err, data) => {
if (err) throw err;
console.log("User submition success!");
});
这篇关于提交表单时,如何检查用户的电子邮件是否不在我的数据库中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:提交表单时,如何检查用户的电子邮件是否不在我的数据库中?
基础教程推荐
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01