

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将 Amazon RDS DB 实例添加到 PHP Elastic Beanstalk 环境
添加数据库

本主题提供使用 Elastic Beanstalk 控制台创建 Amazon RDS 的说明。您可以使用 Amazon Relational Database Service（Amazon RDS）数据库实例来存储由应用程序收集和修改的数据。数据库可以耦合到您的环境并由 Elastic Beanstalk 进行管理，也可以被创建为解耦数据库并由另一项服务进行外部管理。在这些说明中，数据库与您的环境耦合并由 Elastic Beanstalk 管理。有关将 Amazon RDS 与 Elastic Beanstalk 集成的更多信息，请参阅 [将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

**Topics**
+ [

## 向环境中添加数据库实例
](#php-rds-create)
+ [

## 下载驱动程序
](#php-rds-drivers)
+ [

## 使用 PDO 或 “我的” 连接到数据库 SQLi
](#php-rds-connect)
+ [

## 使用 Symfony 连接到数据库
](#php-rds-symfony)

## 向环境中添加数据库实例


**向环境添加数据库实例**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Database**（数据库）配置类别中，选择 **Edit**（编辑）。

1. 选择数据库引擎，然后输入用户名和密码。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

添加一个数据库实例大约需要 10 分钟。环境更新完成后，您的应用程序就可以通过以下环境属性访问数据库实例的主机名和其他连接信息：


| 属性名称 | 描述 | 属性值 | 
| --- | --- | --- | 
|  `RDS_HOSTNAME`  |  数据库实例的主机名。  |  在 Amazon RDS 控制台的 **Connectivity & security**（连接和安全）选项卡上：**Endpoint**（端点）。  | 
|  `RDS_PORT`  |  数据库实例接受连接的端口。默认值因数据库引擎而异。  |  在 Amazon RDS 控制台的 **Connectivity & security**（连接和安全）选项卡上：**Port**（端口）。  | 
|  `RDS_DB_NAME`  |  数据库名称 **ebdb**。  |  在 Amazon RDS 控制台的 **Configuration**（配置）选项卡上：**DB Name**（数据库名称）。  | 
|  `RDS_USERNAME`  |  您为数据库配置的用户名。  |  在 Amazon RDS 控制台的 **Configuration**（配置）选项卡上：**Master username**（主用户名）。  | 
|  `RDS_PASSWORD`  |  您为数据库配置的密码。  |  在 Amazon RDS 控制台中不可供参考。  | 

有关与 Elastic Beanstalk 环境耦合的数据库实例配置的更多信息，请参阅 [将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

## 下载驱动程序


要使用 PHP 数据对象 (PDO) 连接到数据库，请安装与您所选数据库引擎匹配的驱动程序。
+ **MySQL** – [http://php.net/manual/en/ref.pdo-mysql.php](http://php.net/manual/en/ref.pdo-mysql.php)
+ **PostgreSQL** – [http://php.net/manual/en/ref.pdo-pgsql.php](http://php.net/manual/en/ref.pdo-pgsql.php)
+ **Oracle** – [http://php.net/manual/en/ref.pdo-oci.php](http://php.net/manual/en/ref.pdo-oci.php)
+ **SQL Server** – [http://php.net/manual/en/ref.pdo-sqlsrv.php](http://php.net/manual/en/ref.pdo-sqlsrv.php)

有关更多信息，请参阅 [http://php.net/manual/en/pdo.installation.php](http://php.net/manual/en/pdo.installation.php)。

## 使用 PDO 或 “我的” 连接到数据库 SQLi


您可以使用 `$_SERVER[`VARIABLE`]` 从环境中读取连接信息。

对于 PDO，请根据主机、端口和名称创建一个数据源名称 (DSN)。使用数据库用户名和密码将 DSN 传递到 [PDO 的构造函数](https://php.net/manual/en/pdo.construct.php)。

**Example 使用 PDO 连接到 RDS 数据库 - MySQL**  

```
<?php
$dbhost = $_SERVER['RDS_HOSTNAME'];
$dbport = $_SERVER['RDS_PORT'];
$dbname = $_SERVER['RDS_DB_NAME'];
$charset = 'utf8' ;

$dsn = "mysql:host={$dbhost};port={$dbport};dbname={$dbname};charset={$charset}";
$username = $_SERVER['RDS_USERNAME'];
$password = $_SERVER['RDS_PASSWORD'];

$pdo = new PDO($dsn, $username, $password);
?>
```

对于其他驱动程序，请将 `mysql` 替换为您的驱动程序的名称 - `pgsql` `oci` 或 `sqlsrv`。

对于 MySQLi，将主机名、用户名、密码、数据库名称和端口传递给`mysqli`构造函数。

**Example 使用 mysqli\$1connect() 连接到 RDS 数据库**  

```
$link = new mysqli($_SERVER['RDS_HOSTNAME'], $_SERVER['RDS_USERNAME'], $_SERVER['RDS_PASSWORD'], $_SERVER['RDS_DB_NAME'], $_SERVER['RDS_PORT']);
```

## 使用 Symfony 连接到数据库


对于 Symfony 版本 3.2 和更高版本，您可以使用 `%env(PROPERTY_NAME)%`，基于由 Elastic Beanstalk 设置的环境属性在配置文件中设置数据库参数。

**Example app/config/parameters.yml**  

```
parameters:
    database_driver:   pdo_mysql
    database_host:     '%env(RDS_HOSTNAME)%'
    database_port:     '%env(RDS_PORT)%'
    database_name:     '%env(RDS_DB_NAME)%'
    database_user:     '%env(RDS_USERNAME)%'
    database_password: '%env(RDS_PASSWORD)%'
```

有关更多信息，请参阅[外部参数 (Symfony 3.4)](http://symfony.com/doc/3.4/configuration/external_parameters.html)。

对于较早版本的 Symfony，环境变量仅在以 `SYMFONY__` 开头时可供访问。这意味着 Elastic Beanstalk 定义的环境属性无法访问，并且您必须定义自己的环境属性以将连接信息传递给 Symfony。

要使用 Symfony 2 连接到数据库，请为每个参数[创建一个环境属性](create_deploy_PHP.container.md#php-console-properties)。然后，使用 `%property.name%` 来访问配置文件中由 Symfony 转换的变量。例如，名为 `SYMFONY__DATABASE__USER` 的环境属性可作为 `database.user` 访问。

```
    database_user:     "%database.user%"
```

有关更多信息，请参阅[外部参数 (Symfony 2.8)](http://symfony.com/doc/2.8/configuration/external_parameters.html)。