2016-04-04 6 views
0

Ich habe eine Abfrage, die ich bereits getestet und es funktioniert als nur Standard MYSQL in Ordnung, aber ich erhalte immer die ER_PARSE_ERROR, wenn ich es wie so innerhalb Knoten implementieren:‚ER_PARSE_ERROR‘ Wenn Query innerhalb Knoten MYSQL läuft

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 
    }); 
} 

ich bin nicht sicher, warum und bin nicht sicher, wie das Problem zu beheben, so scheint es, mit dieser Linie um ein Problem zu haben: set @query = IF(@exist <= 0, 'alter table userman_users add column presence varchar(20) NULL after username', 'select \'Column Exists\' status');\

ich denke, die ein Problem mit \ aber ave keine Freude des Problem zu lösen, die Abfrage selbst ist einfach ein Feld in die Tabelle einzufügen, wenn es nicht existiert.

Haben Sie Vorschläge oder Ratschläge, um das Problem zu lösen?

Antwort

1

Never mind ich die Antwort gefunden wurde ich hier suchen:

node-mysql multiple statement in one query

Ausführen mehrere Abfrage automatisch aus Sicherheitsgründen daher deaktiviert, warum die Störung erhält, Problem behoben wurde, wenn ich die Abfrage getrennt.

und verwendet, um die folgenden:

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 
    }); 

}