web前端

node连接mysql

2020-04-16  本文已影响0人  姜治宇

mysql是一种关系型数据库,实际使用场景比较广泛。
如何用node连接mysql呢?

1、安装mysql。

大家可以在oracle官网去下载mysql软件,如果是windows系统,最简便的办法是下一个appserv,这是一个php的集成包,里面集成了mysql,一键安装即可,省却一大堆不必要的麻烦。

2、安装node支持mysql的模块。
npm install mysql -S
3、建立连接。

建立连接有两种方式,一种是创建连接对象,一种是创建连接池。
先说创建对象——createConnection,这种方式会建立一个表示与mysql连接的实例对象:

const mysql = require('mysql')
//创建连接
const conn = mysql.createConnection({
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: 'root',
    database: 'mydb'
})
//连接mysql
conn.connect((err) => {
    if (err) {
        console.log(err)
        return;
    }
    console.log('success')
})
//关闭对象,end相当于flush,destroy是强制退出。
conn.end(err=>{
    console.log(err)
})
//conn.destroy()

但在实际web开发中,我们更多的会使用连接池——createPool。
连接池可以理解为一个数组,数组里面的成员就是上面创建的数据库连接实例对象。因为建立一个数据库连接所消耗的内存成本是非常高的,我们不可能为每一个客户端请求都建立一个数据库连接,这样会很快把内存吃满。
因此,我们通常会创建一个连接池,我们可以将数据库连接缓存在连接池当中,如果接收到下一个客户端请求时,可以从连接池中拿出之前的连接对象继续用,而不用再重新建立了。

const mysql = require('mysql')
//创建连接
const pool = mysql.createPool({
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: 'root',
    database: 'mydb'
})
//连接mysql
pool.getConnection((err,conn)=> {
    if (err) {
        console.log(err)
        return;
    }
    conn.release()//当连接不再使用时,release将其归还到连接池中。
})
pool.end()//关闭连接池


4、执行sql语句。

这里要注意的是sql注入问题。sql注入的原理是黑客在提交给服务器的数据中带有sql语句,如果我们不做过滤,就会执行这些恶意的sql语句,导致数据库遭受攻击。
好在mysql模块提供了好用的escape()函数,可以帮我们过滤提交的数据。

const mysql = require('mysql')
//创建连接
const conn = mysql.createConnection({
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: 'root',
    database: 'mydb'
})
//连接mysql
conn.connect((err) => {
    if (err) {
        console.log(err)
        return;
    }
    console.log('success')
})

let sql = 'select * from users where userid='+conn.escape(userid)
conn.query(sql,(err,rows)=>{
    if(err){
        console.log(err)
    } else {
        console.log(rows)
    }
})

还有一种常用的方案,就是用占位符。

const mysql = require('mysql')
//创建连接
const conn = mysql.createConnection({
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: 'root',
    database: 'mydb'
})
//连接mysql
conn.connect((err) => {
    if (err) {
        console.log(err)
        return;
    }
    console.log('success')
})

let sql = 'select * from users where userid=?'//?代表占位
conn.query(sql,[userid],(err,rows)=>{
    if(err){
        console.log(err)
    } else {
        console.log(rows)
    }
})
5、多语句。

这种情况比较常见。比如一个首页,通常会有多张表查询的结果拼装后展示的。

const mysql = require('mysql')
//创建连接
const conn = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'mydb',
    //这一功能打开以后,就可以同时使用多条查询语句
    multipleStatements: true
})
//连接mysql
conn.connect((err) => {
    if (err) {
        console.log(err)
        return;
    }
    console.log('success')
})

let sql = 'select * from users where userid='+conn.escape(userid)
let sql2 = 'select * from news'
conn.query(`${sql};${sql2};`,(err,rows)=>{
    if(err){
        console.log(err)
    } else {
        console.log(rows[0])
        console.log(rows[1])
    }
})
conn.end(err=>{
    console.log(err)
})
//conn.destroy()
上一篇 下一篇

猜你喜欢

热点阅读