我有一个已经测试过的查询,它只是标准的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');\
的一个问题,但是没有解决问题的乐趣,查询本身只是在表中插入一个字段(如果它不存在)。
有任何解决问题的建议或建议吗?
答案 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
});
}