更新时间:2024-05-30 GMT+08:00

PHP示例

本章节主要介绍使用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";
      }
      
      ?>
  • SSL关闭
    <?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”,之后再切换至业务数据库。