连接到云MySQL实例

时间:2017-11-03 19:35:04

标签: php mysql google-cloud-platform

我在网络开发方面相当新;我目前正在尝试创建一个允许用户提交信息并将其存储在数据库中的网站。我有GoDaddy用于我的域名和托管,我使用Google Cloud Platform进行云数据库存储。

我已经成功地找到了如何将HTML表单数据存储到本地数据库(PhpMyAdmin);我还使用MySQL Workbench成功地将我的Google Cloud实例与另一个本地数据库连接起来。

我无法弄清楚如何连接所有东西;我需要将我的Google Cloud实例与GoDaddy连接吗?我应该只使用GoDaddy的数据库产品吗?我尝试将我的实例的IPv4地址作为我的PHP连接代码中的'主机名',我上传到GoDaddy,但它没有连接,我不知道为什么。我甚至都不知道这是不是你应该做的?

我读过关于必须允许特定IP地址的权限来存储信息,但这对我来说没有意义,因为在现实世界中,我可以简单地访问网站,填写表格,我的信息是然后发送到该公司的某个远程数据库。这就是我想要为我的网站完成的事情。谢谢。

PS:我使用PHP作为我的服务器端语言。

1 个答案:

答案 0 :(得分:0)

以下是可用于连接Google Cloud SQL实例的常规功能:

function connectSQL( $dbProject, $dbRegion, $dbInstance, $dbIP, $dbName, $dbUsername, $dbPassword, $ssl = TRUE, $persistent = FALSE, $appEngine = FALSE ) {
  // $dbProject is the project that owns the database, which may differ from the project using the database

  // Create a connection
  $db = NULL;
  if ( $appEngine ) {
    // Connect from App Engine
    if ( $persistent ) {
      try {
        $db = new pdo( "mysql:unix_socket=/cloudsql/$dbProject:$dbRegion:$dbInstance;dbname=$dbName", $dbUsername, $dbPassword, array( PDO::ATTR_PERSISTENT => TRUE ) );
      } catch(PDOException $ex) {
        echoArr( $ex );
        return FALSE;
      }
    } else {
      try {
        $db = new pdo( "mysql:unix_socket=/cloudsql/$dbProject:$dbRegion:$dbInstance;dbname=$dbName", $dbUsername, $dbPassword );
      } catch(PDOException $ex) {
        echoArr( $ex );
        return FALSE;
      }
    }
  } else {
    // Connect from a non-App Engine environment (localhost, other hosting, etc.)
    if ( $persistent ) {
      if ( !$ssl ) {
        try{
            $db = new pdo( 'mysql:host='.$dbIP.':3306;dbname='.$dbName, $dbUsername, $dbPassword, array( PDO::ATTR_PERSISTENT => TRUE ) );
          $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $ex) {
          echoArr( $ex );
          return FALSE;
        }
      } else {
        try{
            $db = new pdo( 'mysql:host='.$dbIP.':3306;dbname='.$dbName, $dbUsername, $dbPassword, array(
              PDO::MYSQL_ATTR_SSL_KEY=>'/path/to/client-key.pem',
              PDO::MYSQL_ATTR_SSL_CERT=>'/path/to/client-cert.pem',
              PDO::MYSQL_ATTR_SSL_CA=>'/path/to/server-ca.pem',
              PDO::ATTR_PERSISTENT => TRUE
              )
          );
          $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $ex) {
          echoArr( $ex );
          return FALSE;
        }
      }
    } else {
      if ( !$ssl ) {
        try{
          $db = new pdo( 'mysql:host='.$dbIP.':3306;dbname='.$dbName, $dbUsername, $dbPassword );
          $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $ex) {
          echoArr( $ex );
          return FALSE;
        }
      } else {
        try{
            $db = new pdo( 'mysql:host='.$dbIP.':3306;dbname='.$dbName, $dbUsername, $dbPassword, array(
              PDO::MYSQL_ATTR_SSL_KEY=>'/path/to/client-key.pem',
              PDO::MYSQL_ATTR_SSL_CERT=>'/path/to/client-cert.pem',
              PDO::MYSQL_ATTR_SSL_CA=>'/path/to/server-ca.pem'
              )
          );
          $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $ex) {
          echoArr( $ex );
          return FALSE;
        }
      }
    }
  }

  return $db;

}

无论托管脚本的位置如何,都可以使用此功能。