自学内容网 自学内容网

在 nodejs 和 MySQL 中,分页查询的占位符

在 Node.js 和 MySQL 中进行分页查询时,你可以使用占位符来安全地传递分页参数(如 LIMITOFFSET)到 SQL 查询中。这通常是通过使用预处理语句(prepared statements)来实现的,尽管在分页查询中,由于 LIMITOFFSET 通常是整数,并且不包含用户输入的数据,因此直接使用它们而不进行预处理也是安全的(但仍然建议使用占位符以保持代码的一致性和可维护性)。

以下是一个使用 mysql2/promise 库进行分页查询的示例,其中使用了占位符:

const mysql = require('mysql2/promise');

(async () => {
  const connection = await mysql.createConnection({
    host: 'localhost',
    user: 'yourUsername',
    password: 'yourPassword',
    database: 'yourDatabase'
  });

  try {
    const pageSize = 10; // 每页显示的记录数
    const pageNumber = 2; // 要查询的页码(从1开始)
    const offset = (pageNumber - 1) * pageSize; // 计算偏移量

    // 使用占位符进行分页查询
    const [rows, fields] = await connection.execute(
      'SELECT * FROM yourTable LIMIT ?, ?',
      [offset, pageSize]
    );

    console.log(rows); // 输出查询结果
  } catch (err) {
    console.error('Error executing query:', err);
  } finally {
    await connection.end(); // 关闭数据库连接
  }
})().catch(err => {
  console.error('Failed to connect to MySQL:', err);
});

在这个例子中,LIMITOFFSET 的值是通过占位符 ? 来传递的,并且这些值被包含在一个数组中作为 execute 方法的第二个参数。这是为了确保这些值被正确地转义,尽管在这个特定的例子中,由于它们是整数,所以实际上不需要转义。然而,使用占位符可以使代码更加清晰,并且如果将来这些值变为包含用户输入的数据,那么使用占位符将确保安全性。

请注意,mysql2/promise 库提供了对 Promise 的支持,这使得异步操作更加简洁。如果你使用的是 mysql 库(非 Promise 版本),你将需要使用回调函数来处理异步操作。不过,无论使用哪个库,分页查询的基本原理和占位符的使用方式都是相同的。


原文地址:https://blog.csdn.net/xuelian3015/article/details/142747787

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!