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
相关产品推荐
相关产品推荐

