首页 > 解决方案 > 在 MySQL 数据库 Nodejs 中存储 JSON 数组

问题描述

我想在数据库中存储用户知道的语言数组。

我的代码:

 router.post('/create-user', async (req, res) =>{
      const query = `INSERT INTO users(name, languages, created_at, updated_at, deleted) 
                     VALUES ('${name}', ${languages}, NOW(), NOW(), 0)`;
      const result = await db.query(query);
      // rest of code..
    });

languages我在类型的数据库中定义了一个列JSON

我在邮递员中调用这个 API body

{
  "name" : "test",
  "languages" : "['English', 'German']"
}

但我收到以下错误:

 "error": "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'English', 'German'].

我该如何解决这个问题?

标签: mysqlnode.jsjsonpostman

解决方案


您正在直接编写查询 - 这是非常糟糕的做法。而是使用:

  const query = 'INSERT INTO users(name, languages, created_at, updated_at, deleted) VALUES (?, ?, NOW(), NOW(), ?)';
  const result = await db.query(query, [name, language, 0]);

这将转义查询中的所有有问题的字符,您可以在此处阅读更多内容:https ://www.npmjs.com/package/mysql2#using-prepared-statements


推荐阅读