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

PHP/PDO能否使用PostgreSQL simple query查询模式?

PostgreSQL PDO强制使用simple查询模式解决方案

原生PDO配置方式

PDO_PGSQL扩展提供了内置参数控制查询模式,你只需要在初始化PDO连接时开启PDO::PGSQL_ATTR_DISABLE_PREPARES属性即可禁用服务器端预处理,强制走simple query协议:

$pdo = new PDO(
    'pgsql:host=你的PgBouncer地址;port=端口;dbname=数据库名',
    '数据库用户名',
    '数据库密码',
    [
        PDO::PGSQL_ATTR_DISABLE_PREPARES => true,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]
);

开启该参数后,所有查询都会走客户端参数拼接的simple模式,不会发送extended协议对应的Parse/Bind/Execute报文,刚好适配不支持extended模式的PgBouncer实例。

Symfony/Doctrine配置方式

你可以直接在Doctrine的DBAL配置中添加该PDO属性,修改config/packages/doctrine.yaml配置如下:

doctrine:
    dbal:
        driver: 'pdo_pgsql'
        host: '%env(DATABASE_HOST)%'
        port: '%env(DATABASE_PORT)%'
        dbname: '%env(DATABASE_NAME)%'
        user: '%env(DATABASE_USER)%'
        password: '%env(DATABASE_PASSWORD)%'
        options:
            !php/const PDO::PGSQL_ATTR_DISABLE_PREPARES: true

修改完成后执行php bin/console cache:clear清理Symfony缓存即可生效,不会再出现ERROR: unsupported pkt type: 80报错。

注意事项

  • 该模式下参数转义由PDO客户端完成,请确保PHP端和数据库端字符集配置一致,建议统一使用UTF8避免注入风险。
  • 如果你同时存在直连PostgreSQL和对接PgBouncer的多个连接,只需要给对接PgBouncer的连接添加该配置即可,其他连接不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:36:04