You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js API查询PostgreSQL含特殊字符邮箱数据的问题

问题分析与解决方案

你的问题根源是直接将参数拼接进SQL语句,这会导致两个严重问题:

  • 语法错误与字符串识别异常:当传入someone@place.com时,拼接后的SQL是WHERE email = someone@place.com,PostgreSQL会把someone当成标识符,@place.com当成变量,自然只会匹配someone;
  • 存在SQL注入风险,这是API安全的大忌。

手动转义特殊字符不仅麻烦,还容易出错,正确的做法是使用参数化查询,让数据库自动处理参数的转义和字符串识别。

修改后的代码

const getUserByEmail = async (email) => {
  try {
    // 使用参数化查询,$1是PostgreSQL的占位符,对应第二个参数数组的第一个元素
    const results = await pool.query(`
            SELECT *
            FROM users
            WHERE email = $1;
        `, [email]); // 将参数放入数组传递
    return results.rows;
  } catch (err) {
    return err.stack;
  }
}

为什么这样有效

  • 参数化查询会让PostgreSQL自动为字符串参数添加引号,并正确处理其中的特殊字符(比如@、引号、反斜杠等),不需要你手动转义;
  • 彻底避免SQL注入攻击,这是处理用户输入参数的标准安全实践;
  • 不会出现因手动转义导致的语法错误。

如果你的数据库驱动支持命名参数(比如$email),也可以用这种方式,但占位符$n是PostgreSQL最通用的写法。

内容的提问来源于stack exchange,提问作者Prof.Chewbacca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:15:43