express-mysql-session icon indicating copy to clipboard operation
express-mysql-session copied to clipboard

Error when using MariaDB pool

Open ITSNOTSTUPIDIFITWORKS opened this issue 2 years ago • 6 comments

Hi!

Without a pool everything works fine.

If I try to use a pool:

const mariadb = require("mariadb");

const pool = mariadb.createPool({
  database: process.env.SQL_DB,
  host: process.env.SQL_HOST,
  user: process.env.SQL_USER,
  password: process.env.SQL_PASSWORD,
  connectionLimit: 10,
});

I get the following error:

text: 'Parameter at position 6 is not set',
  sql: "SELECT ?? AS data, ?? as expires FROM ?? WHERE ?? = ? - parameters:['data','expires','sessions','session_id','xD3hu_1EuRI6JOX1wMztKoLFkuK2QPse']",

Can someone help?

ITSNOTSTUPIDIFITWORKS avatar May 27 '22 09:05 ITSNOTSTUPIDIFITWORKS

I am having the same issue. Did you find a fix for this? Much appreciated

ARR4NN avatar Aug 25 '22 15:08 ARR4NN

Bump!

YasserB94 avatar Aug 28 '22 21:08 YasserB94

Same issue, any solutions as of yet?

InanisOmnia avatar Jan 07 '23 19:01 InanisOmnia

Same issue, any solutions as of yet?

Hi the LordFarquhar, I have not used this in a while, but eventually following code worked for us to query the database.

const mariadb = require("mariadb");

const pool = mariadb.createPool({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
  connectionLimit: 5,
});
//Check for common errors
pool.getConnection((error, connection) => {
    if (error) {
        switch (error.code) {
            case "PROTOCOL_CONNECTION_LOST":
                console.error("DB CONNECTION LOST!");
                break;
            case "ER_CON_COUNT_ERROR":
                console.error("DB RECEIVED TOO MANY CONNECTIONS");
                break;
            case "ECONNREFUSED":
                console.error("DB HAS REFUSED CONNECTION");
                break;
            case "ER_GET_CONNECTION_TIMEOUT":
                console.error("NO CONNECTION TO DATABASE");
                console.error("MAKE SURE YOU HAVE A REACHABLE MARIADB DATABASE");
                console.error(
                    "CHECK YOUR .ENV FILE AND TEST YOUR CONNECTION WITH GIVEN CREDENTIALS"
                );
                break;
        }
    }
    if (connection) {
        connection.release();
    }
});
module.exports = pool;

Example of a class that uses queries:

const pool = require("../helpers/database");
class User {
  constructor() {
    this.pool = pool;
  }
  async getUserByEmail(email) {
    const query =
      "SELECT id,name,email,image_url FROM user_table WHERE email LIKE ?";
    return this.pool.query(query, email);
  }
}

YasserB94 avatar Jan 08 '23 17:01 YasserB94

MariaDB is not explicitly supported by this module, but might work if your version of MariaDB is compatible with MySQL 5.7. Please try to use the latest version of this module (v3) - there were recent changes that might improve compatibility.

chill117 avatar Mar 16 '23 16:03 chill117

I tested the latest version of this module with the latest MariaDB (10.7.8). All tests are passing - so it should be safe to use this module with MariaDB. But it's important to note that this module is not compatible with the mariadb nodejs module that was referenced above in this issue. You should follow the usage examples as shown in this module's readme here or here.

chill117 avatar Mar 18 '23 11:03 chill117