-4

I'm trying to make a function that returns an array of stats from SQL 'SELECT * FROM', when I don't use a function to return it, it works, but I can't use that array outside of 'function(err, results)'

con.query(`SELECT * FROM MemberPeniz WHERE memberId = '${memberID}'`, function(err, results) {
            if(err) {
                throw err;
            }
            console.log(results)
        })

I tried this:

function checkTimeoutMEMBERid(memberID) {
        con.query(`SELECT * FROM MemberPeniz WHERE memberId = '${memberID}'`, function(err, results) {
            if(err) {
                throw err;
            }
            return results
        })

    }
    const result = checkTimeoutMEMBERid(message.author.id);
    console.log(result)

but as I say it returns undefined no matter what id I pass in

DR_BOMBAY
  • 3
  • 2
  • **WARNING** By concatenating parameters into your SQL query, you are likely wide open to [SQL injection](https://stackoverflow.com/questions/601300/what-is-sql-injection). – esqew May 13 '20 at 20:23
  • and what happens when we leave off the WHERE clause as a test, and we do something like `SELECT * FROM MemberPeniz ORDER BY memberid LIMIT 2` ? – spencer7593 May 13 '20 at 20:32
  • @spencer7593 it still returns undefined – DR_BOMBAY May 14 '20 at 08:50

1 Answers1

1

This is because, you are returning results to callback which will not return to caller function. You can update function as,

function checkTimeoutMEMBERid(memberId) {
return new Promise((resolve, reject) =>{
    con.query(`SELECT * FROM MemberPeniz WHERE memberId = ?`,[memberId], (err, results) => {
        if(err) {
            return reject(err)
        }
        resolve(results)
    })
  })
}
checkTimeoutMEMBERid(message.author.id)
.then(result =>
{
console.log(result)
})
Vikas Keskar
  • 935
  • 5
  • 15