首页 > 解决方案 > 为什么我的 SQL 代码中出现语法错误?

问题描述

我收到一条错误消息,上面写着

const INSERT_PRODUCTS_QUERY = 'INSERT INTO products(name, price) VALUES('${name}',${price})';

我知道错误来自单引号,'${name}'但我也尝试删除单引号以试图摆脱此错误,但仍然收到错误消息:

{
"code": "ER_PARSE_ERROR",
"errno": 1064,
"sqlMessage": "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 '{name}, ${price})' at line 1",
"sqlState": "42000",
"index": 0,
"sql": "INSERT INTO products(name, price) VALUES(${name}, ${price})"
}

这是我的代码:

const express = require('express');
const cors = require('cors');
const mysql = require('mysql');

const app = express();

const SELECT_ALL_PRODUCTS_QUERY = 'SELECT * FROM products';

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'react_sql'
});

connection.connect(err => {
    if(err) {
        return err;
    }
});

app.use(cors());

app.get('/', (req, res) => {
    res.send('go to /products to see products')
});

app.get('/products/add', (req, res) => {
    const { name, price } = req.query;
    const INSERT_PRODUCTS_QUERY = 'INSERT INTO products(name, price) VALUES('${name}',${price})';

    connection.query(INSERT_PRODUCTS_QUERY, (err, results) => {
       if(err) {
           return res.send(err);
       } else {
           return res.send('successfully added products');
       }
    });

})

app.get('/products', (req, res) => {
    connection.query(SELECT_ALL_PRODUCTS_QUERY, (err, results) => {
        if(err) {
            return res.send(err)
        } else {
            return res.json({
                data: results
            })
        }
    });
});

app.listen(4000, () => {
    console.log("listening port 4000");
});

标签: javascriptsqlnode.jsdebugging

解决方案


我不太了解 SQL 及其查询,所以对于这个主题(字符串、安全性等),请听听其他人的意见。

正如您在评论中看到的那样,这会将代码打开到 SQL 注入,最好避免使用它。

谢谢,@Keith。


但是如果你想在你的字符串中使用变量,要么你需要组合不同的字符串片段,要么你应该使用模板文字

PS:如果您仍然非常非常想使用模板文字,您可以查看这个用于 NodeJS 的节点包。sql-template-strings

注意反引号:``

const name = "foo";
const price = 100;

const INSERT_PRODUCTS_QUERY = `INSERT INTO products(name, price) VALUES('${name}',${price})`;

console.log( INSERT_PRODUCTS_QUERY );


推荐阅读