使用INSERT查询的NodeJS MySQL撇号重复

时间:2018-12-04 11:34:53

标签: mysql sql node.js

我正在做我的项目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);
    }
  })

1 个答案:

答案 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' ]