suchen

Heim  >  Fragen und Antworten  >  Hauptteil

So übergeben Sie Parameter an die MySQL-Abfrage-Rückruffunktion in Node.js

<p>Ich versuche herauszufinden, wie man benutzerdefinierte Daten richtig an einen Abfrageaufruf übergibt, damit sie im Rückruf verfügbar sind. Ich verwende die MySQL-Bibliothek (alle aktuellen Versionen) in nodejs. </p> <p>Ich habe einen Aufruf Connection.query(sql, function(err, result) {...});</p> <p>Ich kann keine Möglichkeit finden, 1) benutzerdefinierte Daten/Parameter an den Aufruf zu übergeben, damit sie verfügbar sind, wenn der Rückruf aufgerufen wird. Was ist also das Richtige? </p> <p>Ich habe den folgenden Pseudocode: </p> <pre class="brush:php;toolbar:false;">... for (ix in SomeJSONArray) { sql = "SELECT (1) FROM someTable WHERE someColumn = " + SomeJSONArray[ix].id; Connection.query(sql, function (err, result) { ... var y = SomeJSONArray[ix].id; }; }</pre> <p>Aus dem obigen Code muss ich in der Lage sein, den aktuellen Wert von „ix“, der in der Abfrage verwendet wird, an den Rückruf selbst zu übergeben. </p> <p>Wie mache ich das? </p>
P粉078945182P粉078945182466 Tage vor684

Antworte allen(2)Ich werde antworten

  • P粉212971745

    P粉2129717452023-08-23 13:55:53

    为了回答初始问题并举例说明,将回调函数包装在一个立即创建包含传入数据的“快照”作用域的匿名函数中。

    var ix=1;
    connection.query('SELECT 1',
        (function(ix){
            return function(err, rows, fields) {
                console.log("ix="+ix);
                console.log(rows);
            };
        })(ix));

    对于那些像我一样刚刚了解这个概念的人来说,最后的 })(ix)); 是外部的 var ix=1 的值,它被传递给 (function(ix){。如果你将 console.log("ix="+abc); 改为 console.log("ix="+abc);,那么它可以被重命名为 (function(abc){。

    fwiw(感谢Chris提供的链接,填补了空白以得出解决方案)

    Antwort
    0
  • P粉476046165

    P粉4760461652023-08-23 11:39:22

    如果您正在使用node-mysql,请按照文档中的说明进行操作:

    connection.query(
        'SELECT * FROM table WHERE id=? LIMIT ?, 5',[ user_id, start ], 
        function (err, results) {
    
        }
    );

    文档中还提供了适当转义字符串的代码,但在查询调用中使用数组会自动为您转义。

    https://github.com/felixge/node-mysql

    Antwort
    0
  • StornierenAntwort