【问题标题】:MYSQL node js insert issueMYSQL节点js插入问题
【发布时间】:2018-03-01 20:24:28
【问题描述】:

请帮忙,为什么这段代码不起作用?

let [phones, computers, numbers, accessories, smartwatches] = cat;
let names = ["phones", "computers", "numbers", "accessories", "smartwatches"];

for (let i=0; i<names.length; i++){

  let sql = `"INSERT INTO cat (name) VALUES( ${names[i]})" `;

  connection.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
    console.log("Records inserted");

  });

  connection.query( "DELETE n1 FROM cat n1, cat n2 WHERE n1.id > n2.id AND n1.name = n2.name");
}

这是一条错误消息: 错误:ER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“INSERT INTO cat (name) VALUES(phones)”附近使用正确的语法


当我在没有循环的情况下编写此代码时,它会将数据插入到一个 id(field) 中的名称数组中的所有项目。怎么改?


我改变了一些东西,但现在又出现了另一个错误。看看这个:

let [phones, computers, numbers, accessories, smartwatches] = cat;
let names = ["phones", "computers", "numbers", "accessories", "smartwatches"];
for (let i=0; i<names.length; i++){
let nameses = names[i];
  let obj = {"name":"",
              "url":""};
  obj["name"] = nameses;
  obj['url']=cat[i];
  console.log(obj);
  let sql = ("INSERT INTO cat SET?", obj ) ;
connection.query(sql, function (err, result) {
  if (err) throw err;
  console.log(result);
  console.log("Records inserted");
 });


connection.query( "DELETE n1 FROM cat n1, cat n2 WHERE n1.id > n2.id AND n1.name = n2.name");

现在错误是:查询是空的,但是当我 console.log obj 时 - 它给了我正确的结果以及对象的键和值。为什么mysql认为那是空的? :)

【问题讨论】:

    标签: mysql node.js database


    【解决方案1】:

    你为什么不使用准备好的语句?在创建动态 SQL 语句时,如果我为我的语句保持一致的命名和转义例程,我发现它很容易维护。

    例如 SQL 关键字; INSERT、UPDATE、DELETE、WHERE、JOIN、OR & AND 应大写,其中数据库、表和字段名称为小写并用反引号括起来(即table_name),并且任何字段值都用作语句中的参数并因此被引用以这种方式帮助处理 SQL 注入攻击向量

    let sql = 'INSERT INTOcat(name) VALUES(?)'; connection.query(sql, ${names[i]}, function(err, result){ ... })

    【讨论】:

      【解决方案2】:

      `INSERT INTO cat (name) VALUES( ${names[i]})`

      我认为你的双引号是多余的

      【讨论】:

        【解决方案3】:

        尝试在 phpMyAdmin、MySQL Workbench 或类似的东西中运行代码 - 您在应该插入的值周围缺少引号。

        这可以工作:

        let sql = `"INSERT INTO cat (name) VALUES( '${names[i]}')" `;
        

        【讨论】:

        • ER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“INSERT INTO cat (name) VALUES('phones')”附近使用正确的语法
        • 在您的初始代码中,您有反引号和双引号 - 如果您将它们成对删除会发生什么,例如。通过删除两个双引号?
        • 这很容易受到 SQL 注入的攻击。但是,我的反对意见是强调每个问题都有一个范围。
        猜你喜欢
        • 1970-01-01
        • 2017-01-22
        • 1970-01-01
        • 1970-01-01
        • 2019-08-08
        • 2016-07-15
        • 2017-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多