Search code examples
mysqlnode.jsdatabasefatal-error

Why I face Fatal Error in mysql with nodejs?


I`m trying to create a database with mysql module in nodejs but after I create a table and insert some data, when I try to SELECT and get results back, I face fatal error!!

    D:\Programming\Farahani App\App>node mysql.js
    Error: Cannot enqueue Query after fatal error.
        at Protocol._validateEnqueue (D:\Programming\Farahani App\App\node_modules\mysql\lib\protocol\Protocol.js:212:16)
        at Protocol._enqueue (D:\Programming\Farahani App\App\node_modules\mysql\lib\protocol\Protocol.js:138:13)
        at Connection.query (D:\Programming\Farahani App\App\node_modules\mysql\lib\Connection.js:198:25)
        at Handshake.<anonymous> (D:\Programming\Farahani App\App\mysql.js:28:13)
        at Handshake.<anonymous> (D:\Programming\Farahani App\App\node_modules\mysql\lib\Connection.js:526:10)
        at Handshake._callback (D:\Programming\Farahani App\App\node_modules\mysql\lib\Connection.js:488:16)
        at Handshake.Sequence.end (D:\Programming\Farahani App\App\node_modules\mysql\lib\protocol\sequences\Sequence.js:83:24)
        at Protocol.handleNetworkError (D:\Programming\Farahani App\App\node_modules\mysql\lib\protocol\Protocol.js:369:14)
        at Connection._handleNetworkError (D:\Programming\Farahani App\App\node_modules\mysql\lib\Connection.js:418:18)
        at Socket.emit (node:events:390:28) {
      code: 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR',
      fatal: false
    }
    undefined

[mysql is running in my xampp if related... ]

appreciate your help.

my code:

const mysql = require('mysql');

const data = {
    host: "localhost",
    user: "user",
    password: "password",
    database: "mydb"
}
const con = mysql.createConnection(data)

    con.connect(() => {


        // create database 
        con.query('CREATE DATABASE mydb', () => {

        })
        // create table
        const table = "CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))";
        con.query(table, () => {
            })
        // add val to table
        const val1 = "INSERT INTO customers (name, address) VALUES ('Company Inc', 'Highway 37')";
        con.query(val1, () => {

        })
        // log results
        con.query("SELECT * FROM customers",  (err,result)=>{
            if(err) {console.log(err)};
            console.log(result);
        })
        con.end();
    })

Solution

  • There are two problems with your code. The main problem is that you cannot do multiple queries per connection in mysql.

    You can use connection pools to make this easier to manage.

    Second, you should check for errors in the callback. This will help in debugging as well as making your code more robust.

    con.query("select * from my_table", (error, results, fields) => {
      if (error) throw error;
      console.log(results);
    });