mysql - NodeJS MySQL 撇号重复与 INSERT 查询

标签 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

起初,我考虑使用正则表达式来去掉所有 ' 但这并不是纠正原始数据本身的好方法。

我在谷歌搜索解决方案,但确实很难找到这个问题。有谷歌的想法或解决方案吗?

  // // 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);
    }
  })

最佳答案

我自己解决了这个问题。 @scetiner 帮助我了解关键字。

我创建数组并放入所有变量。由于 SQL 注入(inject)攻击,我必须添加占位符(我不确定叫什么。它看起来像?,?,?,?,?)

无论如何,这是我修改过的代码。

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

关于mysql - NodeJS MySQL 撇号重复与 INSERT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53612080/

相关文章:

php - 将日期时间拆分为日期和时间值

sql - 得到一个不同的行及其值

javascript - 使用 Reactjs 将 Express req 和 res 数据传递给客户端

mysql - 如何在 MySQL 中使用触发器创建审计跟踪或日志记录表

mysql - 使用 group by 和 order by 时获得最低值

node.js - 使用在 Firestore 模拟器上运行的 Firebase-Admin 时找不到 Firestore 文档

node.js - 当 Node 应用程序返回 4xx 时,IIS 返回 500

mysql - 连接两个表以从一个表获取 COUNT,从另一个表获取 SUM

PHP Mysqli 为多个值选择值并为重新选择显示相同的值

php + mysql 和夏令时问题 : what are the rules?