三、MySQL模块
是node.js下,专门用来操作MySQL数据库的模块
1,引入MySQL模块,连接数据库
// 引入MySQL模块
const mysql = require('mysql')
//创建连接
const connection = mysql.createConnection({
host:'127.0.0.1',
port:'3306', //端口通常可以省略
user:'root',
password:'', // 此处使用默认空密码
database:'test' //进入数据库test数据库
})
//执行连接
connection.connect()
2,对数据进行操作
query:执行SQL命令
connection.query(SQL语句,数组,回调函数)
SQL注入:在让用户可以输入值的地方,用户的非法输入可能会造成数据库的非授权操作
防止SQL注入:对用户提供的数据进行过滤
2.1 查询
//防止SQL注入
var str = 'king'
// ? 表示占位符
// query的第二个参数,是一个数组,数组中的值会被过滤,过滤后再去替换占位符
connection.query(`select * from emp where ename = ?`,[str],(err,r)=>{
if(err){
throw err
}
console.log(r)
})
2.2 插入
//数据对象
var userObj = {
eid: null,
ename: 'jack',
sex: '1',
birthday: '1999-09-08',
salary: 3200,
deptid: '20',
}
// 插入语句,过滤值,回调函数
connection.query('insert into emp values(?,?,?,?,?,?)', [userObj.eid, userObj.ename, userObj.sex, userObj.birthday,
userObj.salary, userObj.deptid
], (err,r) => {
if (err) {
throw err
}
console.log(r)
console.log('插入成功')
})
//一次过滤整个数组 将values 变换成 set
connection.query('insert into emp set ?',[userObj],(err,r)=>{
if(err){
throw err
}
console.log('插入成功')
})
2.3 修改
// 修改数据
var userObj = {
eid: 20,
ename: 'marry',
sex: '0',
birthday: '2000-09-29',
salary: 8000,
deptid: '10',
}
connection.query('update emp set ? where eid = ?',[userObj,userObj.eid],(err,r)=>{
if(err){
throw err
}
if(r.changedRows != 0){
console.log('修改成功')
}else{
console.log('修改失败')
})
2.4 删除
// 删除数据
var eid = 4
connection.query('delete from emp where eid=?',[eid],(err,r)=>{
if(err){
throw err
}
// console.log(r)
if(r.affectedRows != 0){
console.log('删除数据成功')
}else{
console.log('删除数据失败')
}
})
2.5 如何执行多个SQL命令
// 在建立连接时开启执行多个SQL命令
const connection = mysql.createConnection({
··· //连接数据库
multipleStatements:true //开启一次执行多个SQL命令
})
//执行多个sql命令
connection.query('select * from dept;select count(*) from dept',(err,r)=>{
if(err){
throw err
}
console.log(r)
})
2.6 连接池
连接池包含一组连接
//引入MySQL
const mysql = require('mysql')
//创建连接池对象,包含一组连接
const pool = mysql.createPool({
host: '127.0.0.1',
port: '3306',
user: 'root',
password: '',
database: 'tedu',
// 设置连接池的数量,默认是15个
connectionLimit: 15
})
//获取一个连接 异步方式 通过回调函数获取
pool.getConnection((err,connection)=>{
//err 可能获取失败
if(err){
throw err
}
//connection 成功获取的连接
// 执行SQL命令
connection.query('select * from dept',(err,r)=>{
if(err){
throw err
}
console.log(r)
// 释放连接,归还到连接池
connection.release()
})
})