VALID查询

时间:2015-05-01 11:40:45

标签: mysql sql node.js

所以到目前为止我已经失去了大约2小时,并希望得到一些帮助。 我尝试过使用带有nodejs的mysql lib和一个像SELECT * FROM table;这样的简单查询,但是现在我已经尝试构建一个真正的查询来更新我的数据库它不起作用。

我使用过在线验证工具并检查出来。

    var mysql = require('mysql');
    var request = require('request');
    request.get('http://localhost:8080/dump/asda.dump', function (error, response, body) {
        if (!error && response.statusCode == 200) {
            var data =JSON.parse(body);
            var products = data['products'][0];
            var myquery = "INSERT INTO `products2` (";
            var midquery = ") VALUES (";

            for (var k in products) {
                if (typeof products[k] === 'number') var v = products[k];
                else if (typeof products[k] === 'string') var v = "\'" + products[k]+ "\'";
                else if (typeof products[k] === 'boolean') var v = products[k];
                else continue;
                myquery = myquery + "`" + k + "`,";
                midquery = midquery  + v + ",";
            }
            myquery = myquery.slice(0,-1);
            midquery = midquery.slice(0, -1);

            print(myquery + midquery + ")");

            connection.connect();
            connection.query(myquery, function (err, rows, fields) {
                if (!err) console.log(rows);
                else console.log(err);
            });
            connection.end();
        }
    });

我已经尝试了带刻度的版本,没有刻度,但没有一个工作。

可能的原因可能是

  • 查询太长。也许某些内部字符限制被删除了?

  • 无法使用的字符。我很确定我在那里有不少克罗地亚语ćčćš。我该如何支持?

  • 不正确''逃避(虽然对我来说似乎没问题)。

  • 我将'code'作为表格列。我已经检查过,它不是mysql中的保留关键字,但它在MySQL Workbench中显示为蓝色,所以可能会以某种方式破坏它。

我得到的是:

{ [Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right syntax to
use near '' at line 1]
  code: 'ER_PARSE_ERROR',
  errno: 1064,
  sqlState: '42000',
  index: 0 }

1 个答案:

答案 0 :(得分:1)

每当您在查询中使用数据库实体(如表名或数据库变量)时,都应该尝试使用tick。就您的查询而言,只有myquery作为数据库语句进入函数,并且它不包含整个查询。因此,您会收到错误,因为您的查询不完整,语法不正确(因为它已经不完整)。由于您使用的串联,您的print语句将正确打印。如果能够将连接的查询字符串保存在变量中,例如:

    var new_query=myquery + midquery + ")";

然后将其用作

    connection.query(new_query, function (err, rows, fields) {
            if (!err) console.log(rows);
            else console.log(err);
        });

我认为您的查询应该有效。谢谢......!