Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mysqli\u Connect连接到Google应用程序引擎中的云SQL_Php_Mysql_Wordpress_Google App Engine_Google Cloud Sql - Fatal编程技术网

Php 使用mysqli\u Connect连接到Google应用程序引擎中的云SQL

Php 使用mysqli\u Connect连接到Google应用程序引擎中的云SQL,php,mysql,wordpress,google-app-engine,google-cloud-sql,Php,Mysql,Wordpress,Google App Engine,Google Cloud Sql,我正在尝试在Google App Engine标准环境中配置我的Wordpress站点。我已经为MySQL第二代实例配置了一个云SQL,可以使用云SQL代理访问它 我遇到的问题是,在将应用程序部署到Google app Engine(GAE)环境后,连接到云SQL实例。这里有两个不同的连接字符串;一个用于GAE环境,另一个用于本地环境 if(isset($\u SERVER['GAE\u ENV'])){ $dbConn=mysqli_connect(null,DB_用户,DB_密码,DB_名称

我正在尝试在Google App Engine标准环境中配置我的Wordpress站点。我已经为MySQL第二代实例配置了一个云SQL,可以使用云SQL代理访问它

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

if(isset($\u SERVER['GAE\u ENV'])){
$dbConn=mysqli_connect(null,DB_用户,DB_密码,DB_名称,3306,DB_SOCK);
}else{//本地环境
$dbConn=mysqli\u connect(DB\u主机、DB\u用户、DB\u密码、DB\u名称);
}
当地环境
当我使用这4个参数时,本地环境的连接字符串工作得非常好:
DB\u HOST
DB\u USER
DB\u PASSWORD
DB\u NAME
。当我尝试在GAE环境中使用具有四个参数的相同连接字符串时,它会抛出一个错误:

警告:mysqli\u connect():php\u network\u getaddresses:getaddrinfo失败:名称或服务未知

GAE环境
在中,我被告知使用所有6个可选参数调用
mysqli_connect
,参数1为
null
,参数5为
3306
,作为端口。当我尝试使用带有以下6个参数的GAE连接字符串进行连接:
null
DB\u USER
DB\u PASSWORD
DB\u NAME
3306
DB\u 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');
}

无论我尝试了什么,我似乎都无法从GAE连接到CloudSQL。有人能告诉我我做错了什么吗?谢谢。

我怀疑问题在于套接字路径中的冒号使它无法识别它是绝对路径。尝试定义('DB_HOST','/cloudsql/')取而代之

其他几个技巧:您可以使用在
/cloudsql/
上创建本地unix套接字,这意味着您可以在本地测试部署的相同代码

作为一般编程建议,我会尽量避免对不同类型的值使用
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);
}

作为尝试…在GAE环境中也将DB_主机更改为“localhost”,并确认收到相同的错误消息(消除一些容易忽略的内容)。谢谢Gabe。我尝试了您的建议,将DB_主机更改为
localhost
,但当我这样做时,我得到了一个“建立数据库连接时出错”。这是有意义的,因为如果不指定“:/cloudsql/project\u id:region:instance\u id”,它将不知道要连接到哪个数据库。我想你是在告诉我在wp-config.php文件中更改DB_HOST条目,而不是在mysqli_connect调用中,对吧?不,这很好。出于某种原因,我想确认“文件丢失”不是套接字。这个错误通常意味着数据库不可用(现在不是云SQL,我们说的是它下面的MySQL数据库)。我今天要走了,我会看看是否能戳到人看一下。谢谢@kurtisvg,你的回答很准确。我必须配置一些Wordpress特有的附加功能。这些附加步骤如下所示: