我已在MySQL中将一些唯一代码存储为数组,分别与用户电子邮件相对应,现在我想用电子邮件验证用户,并由用户提交唯一代码。我想创建一个查询,在其中我可以匹配存储在数据库中的电子邮件和唯一ID,以继续用户操作。
数据库条目:
["BZFeWwnmr8Rm6tuu","daFJWZCEtp2WzxtD","VV80UQQZ1ym77h0m"]
我尝试了FIND_IN_SET
这是API的代码,我已经对用户输入的数据进行了字符串化,如果存储了单个唯一值,它将返回该值,但是如果我获取了唯一代码的数组,例如["BZFeWwnmr8Rm6tuu","daFJWZCEtp2WzxtD","VV80UQQZ1ym77h0m"]
MySQL查询无法正常工作。
exports.vr_client_detail = function (req, res) {
const JSON_DATA = 'application/json';
if(req.headers['content-type'] === JSON_DATA){
if (req.body) {
var unique_string = JSON.stringify(req.body.unique_string);
var email = req.body.management_email;
db.sequelize.query('SELECT * FROM im_vr_client_activation '+
'WHERE FIND_IN_SET(unique_string, '+"'"+unique_string+"') AND "+
' management_email= ' + "'" + email + "'").then(function(app){
var arr = app[0];
return res.json({response_status:'success', response_code:185, data:arr, response:'Successfully fetch data.'})
});
}else{
return res.json({response_status:'error',response_code:10001,response:'Post data is empty.'});
}
}else{
return res.json({response_status:'error',response_code:10000,response:'Post data is not a json type.'});
}
}
数据什么也不返回
{
"response_status": "success",
"response_code": 185,
"data": [],
"response": "Successfully fetch data."
}
答案 0 :(得分:0)
最好使用多对一表来规范所有模式,而不是将它们放在单个列中,从而规范化架构。
但是,如果不能这样做,则需要删除JPanel ui = new JPanel(new BorderLayout(4,4));
ui.setBorder(new EmptyBorder(40,4,40,4));
JPanel pageStartPanel = new JPanel(new FlowLayout());
ui.add(pageStartPanel, BorderLayout.PAGE_START);
pageStartPanel.add(new JLabel("Nombre del cuadro de mando:"));
pageStartPanel.add(new JTextField(12));
JPanel checkPanel = new JPanel(new GridLayout(0,2));
ui.add(checkPanel, BorderLayout.CENTER);
for (int ii=1; ii<9; ii++) {
checkPanel.add(new JCheckBox("Checkbox " + ii));
}
JOptionPane.showConfirmDialog(
null,
ui,
"Exportar CdM de Qliksense",
JOptionPane.OK_CANCEL_OPTION);
和[
字符,以便可以使用]
。
您还应该使用参数化查询来防止SQL注入。参见How to create prepared statements in Sequelize?
FIND_IN_SET()
如果您使用的是MySQL 5.7或更高版本,则可以将列的数据类型更改为db.sequelize.query('SELECT * FROM im_vr_client_activation '+
'WHERE FIND_IN_SET(:unique_string, SUBSTR(unique_string, 2, LENGTH(unique_string)-2)) ' +
'AND management_email = :email', {
replacements: { unique_string: unique_string, email: email }
}).then(...)
并使用JSON
。在8.0中,您可以使用JSON_CONTAINS()
运算符。