我正在做我的项目Nodejs和MySQL,但单引号查询存在一些问题。我从github api获得了所有数据,并且通常可以正常工作。但是,如果数据具有单个撇号('),则会出现语法错误。
错误是这样的。
ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's computer engineering classes.', '2017-08-28T04:05:02Z', '2018-10-21T12:04:50Z'' at line 1
起初,我正在考虑使用正则表达式来消除所有',但这不是纠正原始数据本身的好方法。
我在google中搜索解决方案,但是很难找到这个问题。有任何Google想法或解决方案吗?
// // User Repository Information API Process
request(repositoryOptions, function (error, response, data) {
if (error) {
throw error;
}
let result = JSON.parse(data);
for (i = 0; i < result.length; i++) {
// console.log(result[i]);
let sid = shortid.generate();
let githubid = result[i].owner.login;
let name = result[i].name;
let githuburl = result[i].html_url;
let explanation = result[i].description;
let created_at = result[i].created_at;
let updated_at = result[i].updated_at;
let sqlData = `('${sid}', '${githubid}', '${name}', '${githuburl}', '${explanation}', '${created_at}', '${updated_at}')`;
console.log(sqlData);
let sql = `INSERT INTO Personal_Data (id, githubid, name, githuburl, explanation, pjdate1, pjdate2) VALUES ${sqlData}`;
db.query(sql);
}
})
答案 0 :(得分:0)
我自己解决了这个问题。 @scetiner可以帮助我了解关键字。
我创建数组并将其放入所有变量。并且由于SQL注入攻击,我必须添加占位符(我不确定该调用什么。它看起来像?,?,?,?,??)
无论如何,这是我修改的代码。
request(repositoryOptions, function (error, response, data) {
if (error) {
throw error;
}
let result = JSON.parse(data);
for (i = 0; i < result.length; i++) {
// console.log(result[i]);
let sid = shortid.generate();
let githubid = result[i].owner.login;
let name = result[i].name;
let githuburl = result[i].html_url;
let explanation = result[i].description;
let created_at = result[i].created_at;
let updated_at = result[i].updated_at;
let sqlData = [sid, githubid, name, githuburl, explanation, created_at, updated_at];
console.log(sqlData);
let sql = `INSERT INTO Personal_Data (id, githubid, name, githuburl, explanation, pjdate1, pjdate2) VALUES (?,?,?,?,?,?,?)`;
db.query(sql, sqlData);
}
然后像这样正常工作
:控制台
[ 'FUuBdByBV',
'sangumee',
'Blueinno2',
'https://github.com/sangumee/Blueinno2',
'This repository uses BlueInno 2 and shares the source code written.',
'2018-06-11T04:08:17Z',
'2018-12-04T07:48:08Z' ]
[ 'HiRsc7IjNc',
'sangumee',
'CSS-Grid',
'https://github.com/sangumee/CSS-Grid',
'CSS Grid Study',
'2018-07-13T07:49:57Z',
'2018-07-19T05:17:14Z' ]