8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

node-mysql 一个查询中有多个语句

Grault 2月前

80 0

我正在使用 nodejs 10.26 + express 3.5 + node-mysql 2.1.1 +MySQL-Server 版本:5.6.16。我得到了 4 个 DELETE 但只想要 1 个数据库请求,因此我用 \';\' 连接了 DELETE 命令...但是它...

nodejs 10.26 正在 express 3.5 使用 node-mysql 2.1.1 +++ MySQL-Server Version: 5.6.16 .

我收到了 4 个 DELETE,但只想要 1 个数据库请求,因此我用 \';\' 连接了 DELETE 命令...但它总是失败。

var sql_string = "DELETE FROM user_tables WHERE name = 'Testbase';";
sql_string += "DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase';";
sql_string += "DELETE FROM user_tables_rules WHERE parent_table_name = 'Testbase';";
sql_string += "DELETE FROM user_tables_columns WHERE parent_table_name = 'Testbase';";

connection.query(sql_string, function(err, rows, fields) {
   if (err) throw err;
   res.send('true');
});

它抛出这个错误:

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 'DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase';DELETE FR' at line 1

但是如果我将此 SQL 粘贴到 PhpMyAdmin 中,它总是成功...

如果我在单个查询中写入它,它也会成功。

        connection.query("DELETE FROM user_tables WHERE name = 'Testbase'", function(err, rows, fields) {
        if (err) throw err;

        connection.query("DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
            if (err) throw err;


            connection.query("DELETE FROM user_tables_rules WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
                if (err) throw err;

                connection.query("DELETE FROM user_tables_columns WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
                    if (err) throw err;

                    res.send('true');
                });
            });
        });
    });

感谢帮助!

帖子版权声明 1、本帖标题:node-mysql 一个查询中有多个语句
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Grault在本站《mysql》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我猜你正在使用 node-mysql 。( but should also work for node-mysql2 )

    文档

    出于安全原因,禁用对多个语句的支持(如果值未正确转义,则允许 SQL 注入攻击)。

    多语句查询

    要使用此功能,您必须为您的连接启用它:

    var connection = mysql.createConnection({multipleStatements: true});
    

    一旦启用,您可以通过用分号分隔每个语句来执行包含多个语句的查询 ; 。结果将是每个语句的数组。

    例子

    connection.query('SELECT ?; SELECT ?', [1, 2], function(err, results) {
      if (err) throw err;
    
      // `results` is an array with one element for every statement in the query:
      console.log(results[0]); // [{1: 1}]
      console.log(results[1]); // [{2: 2}]
    });
    

    因此如果您已启用 multipleStatements ,您的第一个代码就应该可以工作。

  • 这是否适用于占位符查询,例如 connection.query('SELECT * FROM books` WHERE author = ?', ['David'], function (error, results, fields) { });`

  • @randomness 是的,该语法是正确的。请参阅 github.com/felixge/node-mysql#performing-queries

  • @majidarif,我想我应该说得更清楚一点。是否可以使用 node-mysql 库进行占位符样式的多语句查询?

  • 如果您希望它并行运行,您应该考虑使用 Promise.all() 并对每个语句使用单个查询,而不是在一个语句中使用多个查询。

  • @RossHarding 你可以将其作为一个单独的问题提出。但是是的,你可以这样做。

  • 如下所示使用 \'multiplestatements: true\' 对我有用

    var connection = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: '',
        database: '',
        multipleStatements: true
    });
    connection.connect();
     
    var sql = "CREATE TABLE test(id INT DEFAULT 1, name VARCHAR(50));ALTER TABLE test ADD age VARCHAR(10);";
     
    connection.query(sql, function(error, results, fields) {
        if (error) {
            throw error;
        }
    });
    
  • 要从 DB(SQL) 获取数据,以下函数可以准确运行

    router.get('/', function messageFunction(req, res){//res.send('嗨亲爱的 Rasikh,欢迎来到测试页面。') //=> One WaydbConn.query('SELECT COUNT(name) as counted, name, last_name, phone, email from students',function (err, rows, fields) { // another Wayif (err) throw err

      dbConn.query('SELECT name, author from books',
      function (err, rowsBook, fields) { // another Way
          if (err) throw err
        // console.log('The counted is: ', rows[0].counted);    //=> Display in console
        // res.send('Hi Dear Rasikh, Welcome to Test Page.'+ rows[0].counted)  //=> Display in blank page
        
        res.render('main/index',{data:rows, myData:rowsBook});
      })
    

    });});

  • 这在 Next.js 中对我有用...

    export default async function handler(req, res) {
      try {
        // Build your multiple MySQL queries here
        const querySql = "DELETE FROM favorites WHERE user = ? AND listingID= ?";
        const querySql2 = "UPDATE properties SET saves = ? WHERE listingid = ?";
    
        // Pass any params here
        const valuesParams = [user, listingID];
        const valuesParams2 = [upDateSaves, listingID];
    
        //Execute your multiple MySQL queries here
        const data = await query({query: querySql, values: valuesParams });
        const data2 = await query({query: querySql2, values: valuesParams2 });
    
        //Combine the results
        const combinedResults = [data, data2];
    
        res.status(200).json({ 
        text: combinedResults,
       });
    
      } catch (error) {
        res.status(500).json({ error: 'Error fetching data' });
      }
    }
    
返回
作者最近主题: