[英]Is there any error in my javascript code? The answer is supposed to come in percentage but I'm getting a different output
[英]How come I'm getting a syntax error in my SQL code?
我在一行上看到一個錯誤
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");
});
我對SQL及其查詢的了解不多,因此對於這個主題(字符串,安全性等),請聽別人講。
正如您在注釋中看到的那樣,這會將代碼打開到SQL Injections,最好避免使用它。
謝謝,@基思。
但是,如果要在字符串中使用變量,則需要組合不同的字符串或使用模板文字 。
PS:如果您仍然非常想使用模板文字,則可以檢查此節點包 ,它是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 );
MySQL中的SQL參數不僅是將參數傳遞給查詢的一種便捷方法,而且如果您不想因SQL注入問題而打開自己的站點,這也是必須的。
您需要進行的更改非常少。
首先將查詢更改為->
const INSERT_PRODUCTS_QUERY =
'INSERT INTO products(name, price) VALUES(?, ?)'
當您使用此查詢時,將參數作為第二個參數傳遞。
connection.query(SELECT_ALL_PRODUCTS_QUERY,
[name, price],
(err, results) => {
模板文字不是用簡單的引號引起來,而是用反引號“`”引起來
它應該變成:
const INSERT_PRODUCTS_QUERY = `INSERT INTO products(name, price) VALUES('${name}',${price})`
您沒有正確提供文字,請按以下方式修改查詢,這是可以相應更改的PHP表示形式。
INSERT INTO products(name, price) VALUES('".${name}."','".${price}."');
文字值的單引號與語言單引號是不明確的,這破壞了查詢語法。
這不是實現此目的的最佳方法,因為它打開了對SQL Injection的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.