php可同时连接postgresql、mongodb和redis,但三者协议与驱动互不兼容:postgresql需pdo或pg_connect(禁用mysqli),mongodb须php-mongodb扩展+composer库mongodb/mongodb,redis推荐c扩展phpredis(非predis),各自需独立安装驱动、配置连接参数并实例化客户端。

PHP 能同时连接 PostgreSQL、MongoDB 和 Redis,但三者底层机制完全不同:PostgreSQL 是关系型数据库,走 SQL 协议;MongoDB 是文档型 NoSQL,依赖 BSON 通信;Redis 是内存键值存储,用 RESP 协议。不能共用同一套客户端或扩展,必须分别安装对应驱动、实例化各自客户端。
PostgreSQL 连接必须用 PDO 或 pg_connect,别试 mysqli
mysqli 扩展只认 MySQL 协议,硬连 PostgreSQL 会直接报 PDOException 或 Connection refused。正确路径只有两条:
- 用
PDO:统一接口、支持预处理、异常可控,推荐生产环境使用 - 用
pg_connect():轻量、无额外依赖,适合简单脚本或遗留项目
示例(PDO):
$dsn = 'pgsql:host=localhost;port=5432;dbname=myapp';
$pdo = new PDO($dsn, 'user', 'pass', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => true
]);
注意:PDO::ATTR_PERSISTENT 必须在构造时传入,之后调用 setAttribute() 无效;持久连接不自动清理事务状态,若前一个请求中断在事务中,下次复用可能卡住。
MongoDB 需要 php-mongodb 扩展 + Composer 包双加载
仅装 mongodb 扩展(extension=mongodb.so)还不够——它只提供底层驱动,没封装高级 API。必须再用 Composer 加载官方库 mongodb/mongodb,否则会提示 Class 'MongoDB\Client' not found。
- 检查扩展是否启用:
php -m | grep mongodb,没输出就去改php.ini - 安装客户端库:
composer require mongodb/mongodb - 连接字符串里不要漏掉
scheme,mongodb://是强制前缀,写成localhost:27017直接失败
示例:
use MongoDB\Client;
$client = new Client('mongodb://127.0.0.1:27017');
$db = $client->selectDatabase('mydb');
如果用 Docker 或远程服务器,确保 MongoDB 绑定地址不是 127.0.0.1(默认只监听本地),得改成 0.0.0.0 并开防火墙端口。
Redis 推荐 phpredis 扩展,Predis 只适合开发调试
phpredis 是 C 扩展,性能高、内存占用低、支持管道和连接池;Predis 是纯 PHP 实现,调试方便但慢 3–5 倍,且在高并发下容易触发 PHP 内存限制。生产环境用 Predis 等于主动给自己埋坑。
- 装扩展:
pecl install redis,然后在php.ini加extension=redis.so - 连接前先确认 Redis 是否启用了密码:
requirepass在redis.conf里,代码里就得带auth参数 - 超时设置很关键:
$redis->connect('127.0.0.1', 6379, 2.5)第三个参数是秒级超时,不设默认是无限等待
示例(带认证与超时):
$redis = new Redis();
$redis->connect('127.0.0.1', 6379, 2.5);
$redis->auth('mysecret');
$redis->set('key', 'value');
如果 Redis 启用了 protected-mode yes(默认开启),又没配 bind 或 requirepass,连接会静默失败,只报 Connection refused,查日志才能定位。
三个数据库的连接初始化顺序无所谓,但销毁时要注意:Redis 客户端对象不用显式 close,PHP 请求结束自动释放;MongoDB 的 Client 实例也无需手动断开;而 PostgreSQL 的 PDO 对象设为 null 可提前释放连接资源——这点常被忽略,尤其在长脚本或 CLI 场景下容易堆积空闲连接。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











