![](/img/trans.png)
[英]Google App Engine - Connect to SQL Cloud Instance with php using mysqli
[英]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_HOST
, DB_USER
, DB_PASSWORD
, DB_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连接字符串进行连接时: null
, DB_USER
, DB_PASSWORD
, DB_NAME
, 3306
, DB_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.