mysql - 从node.js multipleStatements 查询获取结果?

标签 mysql node.js node-mysql

我有以下node.js代码通过mysql模块执行其下面的SQL,但是它打印null 控制台,即使在同一 MySQL 用户帐户下手动执行的 SQL 本身也会返回预期值。在执行此操作以检索适当的结果时是否缺少某些内容?

let wipeSQL = fs.readFileSync('./inc/sql/wipedb.sql', 'utf8').replace('%%DATABASE_NAME%%', conf['databasedatabase']);
conn.query(wipeSQL, (err, results, fields) => {
    if (err) {
        conn.destroy();
        reject (false);
        return;
    }
    console.log(results[results.length - 1][0]['@procedures'], fields[fields.length - 1]);
    resolve();
});
<小时/>
USE `%%DATABASE_NAME%%`;
SET FOREIGN_KEY_CHECKS = 0;

SET @procedures = '';
SELECT
    GROUP_CONCAT(CONCAT('DROP PROCEDURE IF EXISTS `', routine_schema, '`.`', routine_name, '`') SEPARATOR ';')
INTO
    @procedures
FROM
    information_schema.ROUTINES R
WHERE
    R.ROUTINE_TYPE = "PROCEDURE" AND
    R.ROUTINE_SCHEMA = '%%DATABASE_NAME%%';

SET @procedures = CONCAT(@procedures, ';');

SET @functions = '';
SELECT
    GROUP_CONCAT(CONCAT('DROP FUNCTION IF EXISTS `', routine_schema, '`.`', routine_name, '`') SEPARATOR ';')
INTO
    @functions
FROM
    information_schema.ROUTINES R
WHERE
    R.ROUTINE_TYPE = "FUNCTION" AND
    R.ROUTINE_SCHEMA = '%%DATABASE_NAME%%';

SET @functions = CONCAT(@functions, ';');
SET @procedures = CONCAT(@procedures, @functions);

SET @tables = '';
SELECT
    GROUP_CONCAT(CONCAT('`', table_schema, '`.`', table_name, '`'))
INTO
    @tables
FROM
    information_schema.tables
WHERE
    table_schema = '%%DATABASE_NAME%%';

SET @tables = IF(@tables IS NULL, 'SET @tables = NULL;', CONCAT('DROP TABLE ', @tables, ';'));

PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET FOREIGN_KEY_CHECKS = 1;

SELECT @procedures;

目的是解决 MySQL 中的一个问题,该问题阻止从动态 SQL 中删除函数存储过程 > 以及来自另一个存储过程,要求我返回要删除的内容,然后将它们作为单独的语句执行。删除这些函数和存储过程的解决方案也同样有效,但我不希望它存在(这是来自 PHP 的端口) code>,其中多语句返回效果很好。控制台输出,如果有帮助的话:

null [ FieldPacket {
    catalog: 'def',
    db: '',
    table: '',
    orgTable: '',
    name: '@procedures',
    orgName: '',
    charsetNr: 33,
    length: 50331645,
    type: 250,
    flags: 0,
    decimals: 31,
    default: undefined,
    zeroFill: false,
    protocol41: true } ]

最佳答案

在 conn.query 之前执行 console.log(wipeSQL) 并检查正在构建哪些查询并将其传递给 conn.query。然后在 mysql 查询浏览器上手动触发此查询以查看结果。

关于mysql - 从node.js multipleStatements 查询获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43177153/

相关文章:

javascript - Node 应用程序路由不起作用

node.js - Objection.js Stubbing Chained "whereIn"方法与 Sinon

javascript - 防止 Node.js 中的 SQL 注入(inject)

node.js - 关闭连接 MySQL Node.js

php - 当我刚刚建表时,MySQL 返回了一个空结果集

asp.net - 字段列表中名为 '' 的字段不明确

node.js - Browserify:使用 'browser' 中的 'package.json' 字段将本地文件替换为 NPM 模块

Java 数据库最终用户

MySQL查询分配错误

Node .js : For each over rows and update asynchronously?