【前后端】npm包mysql2的使用__nodejs mysql包升级版

不定期更新,建议关注收藏点赞。



还在用mysql包吗?已经过时啦!

简介

mysql2 是一个用于 Node.js 的 MySQL 数据库驱动,它是 mysql 包的升级版,性能更好,支持 Promise 和 async/await,非常适合现代 Node.js 开发。
安装很简单。npm install mysql2

使用说明

const mysql = require('mysql2');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'your_username',
  password: 'your_password',
  database: 'your_database'
});

connection.connect();

connection.query('SELECT * FROM users', (error, results, fields) => {
  if (error) throw error;
  console.log(results); // 查询结果
});

connection.end();

  • Promise 方式(推荐)
    mysql2 提供 .promise() 接口,可以与 async/await 配合使用,非常方便。
const mysql = require('mysql2/promise');

async function main() {
  const connection = await mysql.createConnection({
    host: 'localhost',
    user: 'your_username',
    password: 'your_password',
    database: 'your_database'
  });

  const [rows, fields] = await connection.execute('SELECT * FROM users');
  console.log(rows); // 查询结果

  await connection.end();
}

main().catch(console.error);

//使用占位符防止 SQL 注入
//自动转义参数,防止 SQL 注入。
const [rows] = await connection.execute(
  'SELECT * FROM users WHERE id = ? AND status = ?',
  [1, 'active']
);

//生产环境 连接池
const mysql = require('mysql2/promise');

const pool = mysql.createPool({
  host: 'localhost',
  user: 'your_username',
  password: 'your_password',
  database: 'your_database',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
});

async function fetchUsers() {
  const [rows] = await pool.query('SELECT * FROM users');
  console.log(rows);
}
  • 用 ? 【占位符】的方式防止注入是怎么实现的?
    connection.execute('SELECT * FROM users WHERE id = ?', [1]); connection.execute('SELECT * FROM users WHERE id = ? AND status = ?', [1, 'active']);MySQL2 会使用 预处理语句(prepared statements)。
    原理:
  1. 先告诉 MySQL:我要执行一个 SQL 模板(里面有 ? 占位符)
  2. 告诉 MySQL:? 的值是 1(或其他用户输入的内容)
  3. MySQL 自动对参数做转义,不管你传入什么内容(字符串、特殊符号、恶意代码),它都不会被当作 SQL 语法的一部分。
  4. 如果传入sql注入代码['1 OR 1=1'],MySQL2 会自动变成:SELECT * FROM users WHERE id = '1 OR 1=1'这时候就只是查 id 为 “1 OR 1=1” 的记录,而不是执行 OR 逻辑。攻击失效。
  5. mysql 包(老版本)也支持 ? 占位符,并且也可以有效防止 SQL 注入,和 mysql2 的基本原理是一样的:使用占位符 + 参数绑定机制,让用户输入当作“值”处理,而不是“SQL 语句”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七灵微

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值