Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在MYSQL查询中使用多个参数替换时出现语法错误_Javascript_Mysql_Sql - Fatal编程技术网

Javascript 在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 =

在收到AJAX Post请求后,我需要使用JS更新MYSQL数据

我为MYSQL更新查询创建了一个变量,并将要更新的字段、新值、要更新的行作为数组传递。但由于某些原因,这些变量是用单引号(
)读取的,我相信这会导致语法错误

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()
?我更新了我的答案来说明这一点。是的,我也意识到了同样的事情。现在可以用了