'ER_PARSE_ERROR'在节点MYSQL中运行Query时

时间:2016-04-04 11:52:40

标签: mysql node.js

我有一个已经测试过的查询,它只是标准的MYSQL,但是当我在节点中实现它时,我一直得到ER_PARSE_ERROR:

System.in

我不确定为什么并且不确定如何解决问题,这一行似乎有问题:function InsertPresenceVal(pval, status) { connection.query({ sql : "SELECT count(*)INTO @exist FROM information_schema.columns\ WHERE table_schema = database()\ and COLUMN_NAME = 'presence'\ AND table_name = 'userman_users';\ set @query = IF(@exist <= 0, 'alter table userman_users add column presence varchar(20) NULL after username', 'select \'Column Exists\' status');\ prepare stmt from @query;\ EXECUTE stmt;", timeout : 40000 }); }

我认为这是set @query = IF(@exist <= 0, 'alter table userman_users add column presence varchar(20) NULL after username', 'select \'Column Exists\' status');\的一个问题,但是没有解决问题的乐趣,查询本身只是在表中插入一个字段(如果它不存在)。

有任何解决问题的建议或建议吗?

1 个答案:

答案 0 :(得分:1)

没关系,我找到了我在这里寻找的答案:

node-mysql multiple statement in one query

出于安全原因,会自动禁用执行多个查询,因此,当我将查询分开时,问题就解决了。

并使用以下内容:

function InsertPresenceVal(pval, status) {
  connection.query({
    sql : 'SET @preparedStatement = (SELECT IF(\
        (SELECT COUNT(*)\
            FROM INFORMATION_SCHEMA.COLUMNS\
            WHERE  table_name = "userman_users"\
            AND table_schema = DATABASE()\
            AND column_name = "presence"\
        ) > 0,\
        "SELECT 1",\
        "ALTER TABLE `userman_users` ADD `presence` varchar(20) NULL DEFAULT NULL;"\
    ));',
    timeout : 40000
  });

  connection.query({
    sql : 'PREPARE alterIfNotExists FROM @preparedStatement;',
    timeout : 40000
  });

  connection.query({
    sql : 'EXECUTE alterIfNotExists;',
    timeout : 40000
  });

  connection.query({
    sql : 'DEALLOCATE PREPARE alterIfNotExists;',
    timeout : 40000
  });

}