更新时间:2026-05-27 GMT+08:00
分享

PHP示例

操作场景

DDS支持通过PHP语言接口来操作数据,通过PHP连接实例的方式有开启SSL认证连接和关闭SSL认证连接两种,其中开启SSL证书连接加密功能,具有更高的安全性。

DDS新实例默认关闭SSL数据加密,开启SSL请参考开启SSL

本章节主要介绍使用PHP语言连接副本集实例的方法。

前提条件

  1. 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。

    curl ip:port

    返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。

  2. 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。

驱动获取及使用

PHP驱动相关信息:https://www.php.net/mongodb-driver-manager.construct

开启和关闭SSL安全连接

  • 使用MongoDB\Client::__construct()创建client实例。
    function __construct(
    	?string $uri = null, 
    	array $uriOptions = [], 
    	array $driverOptions = []
    )
  • 通过$uriOptions设置SSL为true,启用SSL连接。通过$driverOptions设置ca_file为CA证书路径,allow_invalid_hostname设置为true。
    <?php
    
    require 'vendor/autoload.php'; // include Composer goodies
    
    $replicaset_url = 'mongodb://rwuser:*****@192.168.***.***:8635,192.168.***.***:8635/test?authSource=admin&replicaSet=replica';
    $test_db = 'test_db';
    $test_coll = 'test_coll';
    
    // 创建mongoclient。
    $client = new MongoDB\Client(
        $replicaset_url,
        [
            'ssl' => true,
        ],
        [
            "ca_file" => "/path/to/ca.pem",
            "allow_invalid_hostname" => true
        ]
    );
    
    $collection = $client->$test_db->$test_coll;
    
    // 插入一条记录。
    $result = $collection->insertOne([
        'username' => 'admin', 
        'email' => 'admin@example.com', 
    ]);
    echo "Object ID: '{$result->getInsertedId()}'", "\n";
    
    // 查询记录。
    $result = $collection->find(['username' => 'admin']);
    foreach ($result as $entry) {
        echo $entry->_id, ': ', $entry->email, "\n";
    }
    
    ?>
<?php

require 'vendor/autoload.php'; // include Composer goodies

$replicaset_url = 'mongodb://rwuser:*****@192.168.***.***:8635,192.168.***.***:8635/test?authSource=admin&replicaSet=replica';
$test_db = 'test_db';
$test_coll = 'test_coll';

// 创建mongoclient。
$client = new MongoDB\Client($replicaset_url);
$collection = $client->$test_db->$test_coll;

// 插入一条记录。
$result = $collection->insertOne([
    'username' => 'admin', 
    'email' => 'admin@example.com', 
]);
echo "Object ID: '{$result->getInsertedId()}'", "\n";

// 查询记录。
$result = $collection->find(['username' => 'admin']);
foreach ($result as $entry) {
    echo $entry->_id, ': ', $entry->email, "\n";
}

?>
  • URL中的认证数据库必须为“admin”,即“authSource=admin”。
  • rwuser账户的认证数据库必须为“admin”,之后再切换至业务数据库。

相关文档