mysql驱动程序
- 什么是驱动程序
驱动程序是连接内存和其它存储介质的桥梁
mysql驱动程序是连接内存数据和mysql数据的桥梁
mysql驱动程序通常使用 mysql mysql2(mysql-native);
在vscode中下载驱动程序 mysql2
语句:npm i mysql2
创建数据库连接
//获取客户端
const mysql = require ('mysql2' );
//创建与数据库的连接
const connection = mysql.createConnection ({
host:'localhost' ,
user:'root' ,
password:'',
database:'test'
} );
//简单的查询
//连接.查询
connection.query(
'SELECT * FROM`...` ' , //增删改查 语句就是mysql里面的语句
// 函数(ERR , 结果, 字段) {
// 控制台.登录(结果); //结果包含由服务器返回的行
// 控制台.日志(场); //字段包含有关结果额外的元数据,如果有的话
// }
function(err, results,fields){
console.log(results);
console.log(fields); //一般只要两个参数就行。fields不常用
} );
使用promise接口
const mysql = require("mysql2/promise");
async function test(id){
//创建一个数据库连接
const connection = await mysql.createConnection({
host:'localhost',
user:'root',
password:'',
database:'',
multipleStatements:true, //是否允许有多个sql语句
});
// console.log(connection);
const sql = 'select *from company where id = ${id}; ';
const [results] = await connection.query(sql);
console.log(results);
connection.end();
}
test(5);
一般我们用execute防止SQL注入攻击
sql注入:用户通过注入sql语句到最终查询中,导致整个sql与预期不符。
使用execute,通过mysql变量防止这种现象
//方法一:
const mysql = require('mysql2');
const connection = mysql.createConnection({
host:'localhost',
user:'root',
passsword;'',
batabase:''
})
connection.execute(
"select from `...`;"
function(err,results){
console.log(results);
})
//方法二:
const mysql = require("mysql2/promise");
async function test(id){
const connection = mysql.createConnection({
host:'localhost',
user:'root',
password:'',
database:'',
multipleStatements;true,
});
const sql = `select * from company where id = ? and name = ?;`;
const [results] = await connection.execute(sql,[id,]);
console.log(results);
connection.end();
}
test(`'';insert into company()values()`);
为了避免没有关闭以前的连接,造成cpu的浪费,我们用连接池
- 连接池:通过重新使用以前的连接,连接池保持打开状态,而不是在完成连接后关闭,有助于减少连接到MySQL服务器的时间。
由于避免了建立新连接带来的所有开销,因此可以提高查询的延迟。
//获取客户端
const mysql = require ('mysql2' );
//创建连接池。特定于池的设置是默认值
const pool = mysql.createPool ({
主机:'localhost' ,
用户:'root' ,
数据库:'' ,
waitForConnections:true ,//连接正在进行,是否要等待
connectionLimit:10,默认最大连接限制是10
queueLimit:0 //排队 不限制长度
});
async function test(id){
//创建一个数据库连接
const sql = `select * from employee where id=?;`;
const [results] = await pool.execute(sql,[id]);
console.log(results);
}
test(`'';insert into company() values()`);
模糊查询
使用concat函数
//获取客户端
const mysql = require ('mysql2' );
//创建连接池。特定于池的设置是默认值
const pool = mysql.createPool ({
主机:'localhost' ,
用户:'root' ,
数据库:'' ,
waitForConnections:true ,//连接正在进行,是否要等待
connectionLimit:10,//默认最大连接限制是10
queueLimit:0 //排队 不限制长度
});
async function test(id){
//创建一个数据库连接
const sql = `select * from employee where \`name\` like concat('%',?,'%');`;
const [results] = await pool.execute(sql,[id]);
console.log(results);
}
test("段");
- ORM下一节