Javascript 在MYSQL查询中使用多个参数替换时出现语法错误
在收到AJAX Post请求后,我需要使用JS更新MYSQL数据 我为MYSQL更新查询创建了一个变量,并将要更新的字段、新值、要更新的行作为数组传递。但由于某些原因,这些变量是用单引号(Javascript 在MYSQL查询中使用多个参数替换时出现语法错误,javascript,mysql,sql,Javascript,Mysql,Sql,在收到AJAX Post请求后,我需要使用JS更新MYSQL数据 我为MYSQL更新查询创建了一个变量,并将要更新的字段、新值、要更新的行作为数组传递。但由于某些原因,这些变量是用单引号(“)读取的,我相信这会导致语法错误 var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var MYSQL = require('mysql'); var server =
“
)读取的,我相信这会导致语法错误
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var MYSQL = require('mysql');
var server = require('http').createServer(app);
//declaring var 'conn' for MYSQL.createPool
let columns = new Array();
// Piece of code Starting the Server
// Routing
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(express.static(path.join(__dirname, 'public')));
app.post('/', function (req, res) {
updateWorkbook(req.body);
res.send('Thanks for the data.');
});
//This is the function extracts the row, field value that need to be updated from the AJAX request
function updateWorkbook( data ){
getcolumns().then( function (columns) {
console.log("Columns got returned to Updateworkbook function")
for (let d = 0; d < data.length; d++) {
let rowToUpdate = data[d].id.replace('row_', '').split('_')[0];
let fieldToUpdate = data[d].id.replace('row_', '').split('_')[1];
let newValue = data[d].value;
console.log('row,field,value: ' + rowToUpdate + '|' + fieldToUpdate + '|' + newValue);
let key_to_replace;
for(let i = 0; i < columns.length; i++) {
let looper = columns[i].toLowerCase()
if (looper === fieldToUpdate) {
key_to_replace = columns[i]
}
}
let field_to_replace = key_to_replace.toString();
console.log(field_to_replace) //It prints out a normal string value here
updatemysql(field_to_replace, newValue, rowToUpdate);
}
});
};
//This is the function which updates MYSQL data
function updatemysql(field, newval, row) {
var sql = "UPDATE mydb.mytable SET ? = ? WHERE ROW_ID = ?;";
conn.getConnection( function (err, connection) {
if (err){
return cb(err);
connection.release();
}
console.log("Connection got established")
conn.query(sql, [field, newval, row], function (error, results){
if (error){
throw error;
connection.release();
}
console.log('Data Updated');
connection.release();
});
});
}
//Function to extract all columns from MYSQL and stores them in an array
function getcolumns() {
return new Promise(function(resolve, reject) {
console.log("getcolumns got initiated")
conn.getConnection( function (err, connection) {
if (err){
return cb(err);
connection.release();
return reject(err);
}
else {
var sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 'mytable';"
conn.query(sql, function (error, results){
for (let i = 0; i < results.length; i++) {
columns.push(results[i]['COLUMN_NAME'])
}
resolve(columns);
console.log("Extracted columns")
connection.release();
});
}
});
});
};
var express=require('express');
var-app=express();
var bodyParser=require('body-parser');
var MYSQL=require('MYSQL');
var server=require('http')。createServer(应用程序);
//为MYSQL.createPool声明变量“conn”
让columns=newarray();
//启动服务器的一段代码
//路由
app.use(bodyParser.json());//用于解析application/json
app.use(bodyParser.urlencoded({extended:true}));//用于解析应用程序/x-www-form-urlencoded
app.use(express.static(path.join(uu dirname,'public'));
app.post('/',函数(req,res){
更新工作手册(要求正文);
res.send('感谢提供数据');
});
//此函数用于从AJAX请求中提取需要更新的行、字段值
函数updateWorkbook(数据){
getcolumns().then(函数(列){
log(“返回到Updateworkbook函数的列”)
for(设d=0;d
以下是我收到的错误:
错误:ER_PARSE_错误:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“Source\u of_Phone\u Number\u'=“Test”附近使用的正确语法,其中ROW\u ID='1'`
手机号码的来源是要替换的键。
Test
是newValue
。
1
是行ID
函数updatemysql()
中存在问题,该函数使用以下SQL:
var sql=“UPDATE mydb.mytable SET?=?WHERE ROW_ID=?;”代码>
不能将列名作为参数传递
您需要将此更改为:
var sql = "UPDATE mydb.mytable SET " + field + " = ? WHERE ROW_ID = ?;";
因此,只应向查询传递两个参数:
conn.query(sql, [newval, row], function (error, results){ ... });
这就解决了错误。代码现在运行,但没有更新任何内容。MYSQL响应中匹配的行数为0,但我在MYSQL上手动尝试了相同的行ID,该行ID已更新。@VinVenture:您是否也将调用中的参数数组更改为conn.query()
?我更新了我的答案来说明这一点。是的,我也意识到了同样的事情。现在可以用了