javascript - 關於用mysql模組連接資料庫的一點疑問
PHP中文网
PHP中文网 2017-05-16 13:37:28
0
1
433

看實例程式碼是這樣子的;

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

感覺應該是下面這樣的啊

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

就是感覺資料庫關閉連線應該是在查詢的回呼裡面完成啊,如果像第一種寫法,查詢還沒結束,就關閉資料庫,是不是不妥呢,這個mysql模組內部原理不是很清楚;
望大家解惑啊;

PHP中文网
PHP中文网

认证0级讲师

全部回覆(1)
小葫芦

文檔:

Closing the connection is done using end() which makes sure all remaining queries are executed before sending a quit packet to the mysql server.

所以,呼叫了end()不会马上关闭连接,要等剩余的查询执行完才关闭,该触发的回调还是触发。destroy()才是直接關閉連線。

具體實作就是把全部操作都放到佇列裡執行,end()只是把一個Quit操作放入佇列,Quit操作執行完後才真正關閉。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板