【问题标题】:How to pass Javascript variables in MySQL query如何在 MySQL 查询中传递 Javascript 变量
【发布时间】:2018-02-17 15:58:34
【问题描述】:

我做了一些研究,得到的答案相互矛盾,所以就这样吧。你必须先将 JS 变量传递到 PHP 中还是可以将它们直接插入到 MySQL 表中?我在 node.js 中运行了这个,谢谢!

var part = [];
var des = [];
var price = [];
var request = require('request');
var cheerio = require('cheerio');
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "127.0.0.1",
  user: "root",
  password: "",
  database: "parts"
});

request('URL', function(error, response, body) {
    if (!error && response.statusCode == 200) {
        var $ = cheerio.load(body);
        getPartNumber();
        getDescription();
        getPrice();
        con.connect(function(err) {
        if (err) throw err;
        for (var i = 0; i<part.length; i++){
            var sql = "INSERT INTO data_9_17 (partNumber, description, price) VALUES (part[i], des[i], price[i])";
            con.query(sql, function (err, result) {
                if (err) throw err;
                console.log("1 record inserted, ID: " + result.insertId);
            });
        }
});

function getPartNumber() {
$("input[name = 'sku']").each(function() { part.push($(this).val()) });
}

function getDescription() {
$(".ellipsis_text").each(function() { des.push($(this).text()) });
}

function getPrice() {
$(".sellprice, .dbl").each(function() { price.push($(this).text()) });
}
}
});

【问题讨论】:

  • 如果你在Node上,可以直接做。
  • 但不是那样...请记住,使用节点您有服务器端 javascript...

标签: javascript jquery mysql node.js


【解决方案1】:

你的查询字符串应该是这样的:

"INSERT INTO data_9_17 (partNumber, description, price) VALUES ('" + part[i] + "', '" + des[i] + "', '" + price[i] + "')";

您可以使用+ 连接值。签出this

编辑:我犯了一个错误。没有放入'。现在修复... 无论如何,J Johnson 是对的。由于 SQL 注入,最好使用准备好的语句。

【讨论】:

    【解决方案2】:

    你可以使用准备好的语句,像这样:

    var query = 'INSERT INTO data_9_17 (partNumber, description, price) VALUES (?, ?, ?)';
    
    con.query(query, [part[i], des[i], price[i]], function(err, results) ... )
    
    // You will put your variables inside []
    

    如果您想了解更多信息,请参阅mysql npm 模块:

    https://www.npmjs.com/package/mysql#escaping-query-values

    【讨论】:

    • 我只打算在我的桌面上运行它,但我完全明白你在说什么。谢谢,J 约翰逊!
    • 没问题@GarrettPenfield :)
    【解决方案3】:

    您需要将查询字符串与变量的值连接起来:

    var sql = "INSERT INTO data_9_17 (partNumber, description, price) VALUES (" + part[i] + ", " + des[i] + ", " + price[i] + ")";
    

    出于安全考虑,我建议你使用prepared statement:

    var sql = mysql.format("INSERT INTO data_9_17 (partNumber, description, price) VALUES (?, ?, ?)", (part[i], des[i], price[i]));
    
    con.query(sql, function (err, result) {
    .....
    .....
    .....
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-25
      • 1970-01-01
      • 2014-11-18
      • 2022-01-24
      • 2019-12-22
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 2016-10-11
      相关资源
      最近更新 更多