如何在 MySQL 查询中传递 Javascript 变量

Posted

技术标签:

【中文标题】如何在 MySQL 查询中传递 Javascript 变量【英文标题】:How to pass Javascript variables in MySQL query 【发布时间】: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... 【参考方案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) 
.....
.....
.....

【讨论】:

以上是关于如何在 MySQL 查询中传递 Javascript 变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中将div值传递给mysql查询[关闭]

JavaScrip ajaxt和python flask通过json传递数据的方法

Socket.io、Node.js:如何在 javascript.js 中将 javascript 变量传递给 mysql 查询?

django+javascrip的疑问一

使用nodejs在Mysql查询中传递数组

如何在python中的mysql查询中使用动态变量