
`pg_escape_literal()` 必须传入有效的 postgresql 数据库连接资源,否则将返回空字符串;正确调用后,它会为字符串添加单引号并转义特殊字符,适用于直接拼接 sql 字面量。
pg_escape_literal() 是 PHP 中用于安全构造 PostgreSQL SQL 字面量(literal)的内置函数。与 pg_escape_string() 不同,它不仅转义特殊字符,还会自动为结果加上单引号,使其可直接用于 SQL 查询中(如 WHERE name = '...'))。但一个关键前提是:它必须接收一个有效的 PostgreSQL 连接资源作为第一个参数。
若省略连接参数(如 pg_escape_literal('Hello world!')),函数将失败并静默返回空字符串 '' —— 这正是你遇到 "Escaped: ''" 的根本原因。而 pg_escape_string() 在无连接时可能“看似有效”,是因为它会尝试使用最近一次打开的连接(PHP 内部隐式连接机制),但这属于未定义行为,不可靠且已被弃用,不应在生产环境中依赖。
✅ 正确用法如下:
⚠️ 注意事项:
- 连接必须有效:pg_escape_literal() 不接受 null 或无效资源,否则返回空字符串,且不抛出警告或错误,极易被忽略;
- 返回值已带单引号:结果形如 'Hello world!',切勿再手动加引号(如 '$escaped'),否则会导致语法错误;
- 不替代预处理语句:该函数仅用于动态拼接 SQL 字面量的场景;对于用户输入的查询条件,强烈推荐使用 pg_query_params() 配合占位符,以彻底规避 SQL 注入风险;
- 兼容性:PHP 8.1+ 已废弃 pg_escape_string() 等旧函数,pg_escape_literal() 仍受支持,但其使用场景本身已逐渐被参数化查询取代。
? 总结:调试 pg_escape_literal 时,请始终确保传入有效连接资源,并通过 var_dump($escaped) 或 htmlspecialchars() 安全输出验证结果。记住——安全的数据库交互,始于显式连接、止于参数化查询。










