recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Quelques questions sur l'utilisation du module MySQL pour se connecter à la base de données

Regardez l'exemple de code comme celui-ci ;

const mysql = require('mysql');

exports.base = (sql, data, callback) => {
    // 创建数据库连接
    let connection = mysql.createConnection({
        host: 'localhost', //数据库所在的服务器域名或者IP
        user: 'root', //用户名
        password: '', //密码
        database: 'book' //数据库名称
    });
    // 执行连接动作
    connection.connect();
    // 执行数据库操作
    connection.query(sql, data, (err, rows) => {
        if (err) throw err;
        callback(rows);
    });
    // 关闭数据库
    connection.end();
}

Ça devrait ressembler à ça

const mysql = require('mysql');

exports.base = (sql, data, callback) => {
    // 创建数据库连接
    let connection = mysql.createConnection({
        host: 'localhost', //数据库所在的服务器域名或者IP
        user: 'root', //用户名
        password: '', //密码
        database: 'book' //数据库名称
    });
    // 执行连接动作
    connection.connect();
    // 执行数据库操作
    connection.query(sql, data, (err, rows) => {
        if (err) throw err;
        callback(rows);
        // 关闭数据库
        connection.end();
    });
    
}

Je pense juste que la fermeture de la connexion à la base de données doit être effectuée lors du rappel de la requête. Si elle est écrite comme la première fois et que la requête n'est pas terminée, est-il inapproprié de fermer la base de données ? Le principe interne de ce module MySQL est le suivant : pas très clair ;
J'espère que tout le monde dissipera la confusion ;

PHP中文网PHP中文网2778 Il y a quelques jours437

répondre à tous(1)je répondrai

  • 高洛峰

    高洛峰2017-05-16 13:39:28

    Documentation :

    La fermeture de la connexion se fait à l'aide de end() qui garantit que toutes les requêtes restantes sont exécutées avant d'envoyer un paquet de sortie au serveur MySQL.

    Ainsi, appeler end() ne fermera pas la connexion immédiatement. Elle ne sera fermée que lorsque les requêtes restantes seront exécutées. Le rappel qui doit être déclenché sera toujours déclenché. destroy() ferme directement la connexion. end()不会马上关闭连接,要等剩余的查询执行完才关闭,该触发的回调还是触发。destroy()才是直接关闭连接。

    具体实现就是把全部操作都放到队列里执行,end()

    L'implémentation spécifique consiste à mettre toutes les opérations dans la file d'attente pour exécution. end() met simplement une opération Quit dans la file d'attente, et elle n'est pas vraiment fermée tant que l'opération Quit n'est pas exécutée. 🎜

    répondre
    0
  • Annulerrépondre