javascript - 提交表单时如何检查用户电子邮件是否已在我的数据库中?
问题描述
这是我在这里的第一个问题,因此对任何错误表示歉意。我正在构建一个测试,用户可以在其中登录并重新参加测试。但是,当用户提交表单时,我不确定如何检查电子邮件是否已经在我的 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: INSERT INTO Govt_profiles (First_Name, Last_Name, Email) SELECT ?, ?, ? 不存在的地方(从 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
which 检查电子邮件是否存在:
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!");
});
推荐阅读
- iphone - 定位服务的应用程序权限弹出窗口从不显示在屏幕录制的视频中
- python - 在 Jupyter Notebook 中可视化决策树
- php - PHP Post 操作总是以状态 200 结束
- bash - Unix :: AWK 意外删除了第一行
- c - 如果有人能找到我可以修复我的 switych c 代码的方法?
- python - Why does Django template block/include include external tag?
Consider the below code:
<table id='table1'> {% if model_name == 'TransactionsTable' %} {% block transactions_create %} {%
- clojure - 什么是 Clojure CLI 工具“edn string”作为 arg?
- python - How to change scheduling time while the app is running
- wordpress - Unexpected page redirection from HTTPS to HTTP
- python-3.x - Matplotlib 格式化 X 轴显示 Jan-1-1970