php连接couchdb数据库不需要像连接mysql那样使用特定的数据库扩展,因为couchdb提供了基于http的restful api,php可以通过发送http请求来完成数据库的连接和各种操作。下面会一步步讲解具体的实现过程。
环境准备
首先需要确保本地或者服务器上已经安装并启动了couchdb服务,默认情况下couchdb会监听5984端口,你可以通过访问http://127.0.0.1:5984/来验证服务是否正常运行,正常的话会返回包含couchdb版本等信息的json数据。
同时需要保证php环境开启了curl扩展,因为后续我们会使用curl来发送http请求,如果你使用的是集成环境比如wamp、xampp,一般默认已经开启了这个扩展,也可以通过phpinfo()函数查看是否开启。
安装http请求依赖
虽然php可以用原生的curl函数发送请求,但是为了代码更简洁易维护,推荐使用成熟的http客户端库,这里以guzzle为例,你可以通过composer安装:
composer require guzzlehttp/guzzle
基础连接与测试
安装完成依赖之后,就可以编写连接couchdb的代码了,首先测试能否正常访问couchdb的根路径,验证连接是否通畅:
<?php
require_once 'vendor/autoload.php';
use GuzzleHttpClient;
// 创建http客户端实例,设置couchdb的基础地址
$client = new Client([
'base_uri' => 'http://127.0.0.1:5984/',
'timeout' => 2.0,
]);
try {
// 发送get请求访问根路径
$response = $client->request('GET', '/');
// 获取响应内容
$body = $response->getBody()->getContents();
echo "连接couchdb成功,返回信息:" . $body;
} catch (Exception $e) {
echo "连接失败,错误信息:" . $e->getMessage();
}
数据库操作示例
创建数据库
如果指定的数据库不存在,可以通过put请求创建:
<?php
require_once 'vendor/autoload.php';
use GuzzleHttpClient;
$client = new Client([
'base_uri' => 'http://127.0.0.1:5984/',
'timeout' => 2.0,
]);
$dbName = 'test_db';
try {
// 发送put请求创建数据库,couchdb中创建数据库是向/db名称路径发送put请求
$response = $client->request('PUT', $dbName);
$body = json_decode($response->getBody()->getContents(), true);
if ($body['ok'] === true) {
echo "数据库{$dbName}创建成功";
}
} catch (Exception $e) {
echo "创建数据库失败:" . $e->getMessage();
}
插入文档
couchdb是文档型数据库,插入数据就是向数据库路径发送post请求,携带json格式的文档内容:
<?php
require_once 'vendor/autoload.php';
use GuzzleHttpClient;
$client = new Client([
'base_uri' => 'http://127.0.0.1:5984/',
'timeout' => 2.0,
]);
$dbName = 'test_db';
// 要插入的文档内容
$doc = [
'name' => '张三',
'age' => 25,
'email' => 'zhangsan@ipipp.com'
];
try {
$response = $client->request('POST', $dbName, [
'json' => $doc
]);
$body = json_decode($response->getBody()->getContents(), true);
if ($body['ok'] === true) {
echo "文档插入成功,文档id:" . $body['id'] . ",版本号:" . $body['rev'];
}
} catch (Exception $e) {
echo "插入文档失败:" . $e->getMessage();
}
查询文档
可以通过文档id查询对应的文档内容,向/db名称/文档id路径发送get请求即可:
<?php
require_once 'vendor/autoload.php';
use GuzzleHttpClient;
$client = new Client([
'base_uri' => 'http://127.0.0.1:5984/',
'timeout' => 2.0,
]);
$dbName = 'test_db';
// 替换为实际插入的文档id
$docId = '替换成你的文档id';
try {
$response = $client->request('GET', "{$dbName}/{$docId}");
$doc = json_decode($response->getBody()->getContents(), true);
echo "查询到的文档内容:";
print_r($doc);
} catch (Exception $e) {
echo "查询文档失败:" . $e->getMessage();
}
注意事项
- 如果couchdb设置了管理员账号密码,需要在基础地址中加上认证信息,比如
http://user:password@127.0.0.1:5984/ - 所有的请求和响应都是json格式,处理的时候注意做好json的编码和解码
- 如果couchdb不在本地,需要把地址替换成对应的服务器ip,同时确保端口对外开放
phpcouchdb数据库连接http_client修改时间:2026-06-25 09:45:53