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

PHP 8.1及以上版本使用pg_escape_literal连接PostgreSQL报错求助

解决PHP 8.1中pg_escape_literal的弃用错误

PHP 8.1起,pg_escape_literal()不再支持自动获取PostgreSQL连接,必须手动传入连接资源作为第一个参数,这就是你遇到弃用警告的核心原因。

正确使用方式

  • 先通过pg_connect()建立并保存连接变量:
    $conn = pg_connect("host=localhost dbname=你的数据库名 user=用户名 password=密码");
    
  • 调用pg_escape_literal()时,第一个参数传入上述连接变量,第二个参数是需要转义的字符串:
    $search_for = "O'Neil";
    $escaped_str = pg_escape_literal($conn, $search_for);
    // 构造查询语句
    $query = "SELECT * FROM 表名 WHERE 字段 = $escaped_str";
    

报错原因说明

你之前的代码没有手动传入连接参数,即便已经通过pg_connect()建立了连接,PHP 8.1也不再自动识别并使用该连接,因此直接触发了弃用警告。

更安全的替代方案

比起手动调用转义函数,优先推荐使用参数化查询,它能彻底避免SQL注入风险,也无需手动处理字符串转义:

$search_for = "O'Neil";
// 预编译语句
$stmt = pg_prepare($conn, "search_query", 'SELECT * FROM 表名 WHERE 字段 = $1');
// 执行预编译语句并传入参数
$result = pg_execute($conn, "search_query", [$search_for]);

内容的提问来源于stack exchange,提问作者user23517862

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:22:03