【问题标题】:Nodejs MySQL ER_PARSE_ERROR on VALID queryVALID查询上的Nodejs MySQL ER_PARSE_ERROR
【发布时间】:2015-07-11 05:53:53
【问题描述】:

我已经尝试将 mysql lib 与 nodejs 一起使用,并且像 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();
        }
    });

我已经尝试了带有刻度和不带有刻度的版本,它们都不起作用。

可能的原因

  • 查询过长。也许超出了一些内部字符限制?

  • 不支持的字符。我很确定我有很多克罗地亚语ćčćš。我该如何支持?

  • 不正确的 ' " 转义(虽然在我看来没问题)。

  • 我将“代码”作为表格列。我已经检查过了,它不是 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 }

【问题讨论】:

  • 我看到你在哪里打印myquery + midquery + ")",它将打印整个连接查询,但只有myquery 被传递给connection.query 方法,这只是整个查询的一部分。跨度>
  • 谢谢。由于问题与标题无关,我现在应该删除我的帖子吗?

标签: mysql sql node.js


【解决方案1】:

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

    var new_query=myquery + midquery + ")";

然后将其用作

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-02
    • 2021-11-07
    • 2020-02-13
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多