繁体   English   中英

使用mysqli_connect连接到Google App Engine中的Cloud SQL

[英]Connect to Cloud SQL in Google App Engine using mysqli_connect

我正在尝试在Google App Engine标准环境中配置Wordpress网站。 我已经为MySQL第二代实例配置了Cloud SQL,并且可以使用Cloud SQL代理对其进行访问。

将应用程序部署到Google App Engine(GAE)环境后,我遇到的问题与Cloud SQL实例有关。 这是两个不同的连接字符串; 一个用于GAE环境,另一个用于本地环境。

if (isset($_SERVER['GAE_ENV'])) {
    $dbConn = mysqli_connect (null, DB_USER, DB_PASSWORD, DB_NAME, 3306, DB_SOCK); 
} else {  // local environment
    $dbConn = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
}

当地环境
当我使用以下四个参数时,本地环境的连接字符串可以完美工作: DB_HOSTDB_USERDB_PASSWORDDB_NAME 当我尝试在GAE环境中使用带有四个参数的相同连接字符串时,会引发错误:

Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known

GAE环境
这个问题中 ,我被告知使用所有6个可选参数调用mysqli_connect ,其中参数1的null和参数5的3306是端口。 当我尝试使用带有以下6个参数的GAE连接字符串进行连接时: nullDB_USERDB_PASSWORDDB_NAME3306DB_SOCK ,我得到一个略有不同的错误:

Fatal error: Uncaught mysqli_sql_exception: No such file or directory

这是wp-config.php的代码,该代码根据环境设置连接字符串变量:

if ($onGae) {
    /** GAE Environment */
    define('DB_NAME', 'database');
    define('DB_HOST', ':/cloudsql/project_id:region:instance_id');
    define('DB_USER', 'user');
    define('DB_PASSWORD', 'password');
} else {
    /** Local environment */
    define('DB_NAME', 'database');
    define('DB_HOST', '127.0.0.1');
    define('DB_USER', 'user');
    define('DB_PASSWORD', 'password');
}

不管我怎么努力,我似乎无法得到mysqli_connect从GAE连接到CLOUDSQL。 有人可以告诉我我做错了吗? 谢谢。

我怀疑问题是套接字路径中的冒号阻止了它识别出它是绝对路径。 尝试define('DB_HOST', '/cloudsql/<project_id:region:instance_id>'); 代替。

其他一些技巧:您可以使用Cloud SQL代理/cloudsql/<CONNECTION_NAME>上创建本地unix套接字,这意味着您可以测试在本地部署的相同代码。

另外,作为一般编程建议,我将尽量避免将DB_HOST用于不同类型的值(因为它们实际上是不相同的)。 这将帮助您$DB_HOST其他地方无意中使用$DB_HOST并期望使用IP地址。 尝试这样的事情:

define('DB_NAME', 'database');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
if ($onGae) {
    /** GAE Environment */
    define('DB_HOST', null);
    define('DB_SOCKET', '/cloudsql/project_id:region:instance_id');
} else {
    /** Local environment */
    define('DB_HOST', '127.0.0.1');
    define('DB_SOCKET', null);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM