【问题标题】:Connecting from App Engine to Cloud SQL not working从 App Engine 连接到 Cloud SQL 不起作用
【发布时间】:2015-01-12 01:12:26
【问题描述】:

我正在尝试将我的应用(来自 App Engine)连接到 Cloud SQL,但我一定遗漏了一些东西:

  • 我添加了一个 Cloud SQL 实例
  • 我已授权我的应用程序

  • 我通过 PhpMyAdmin 添加了一个 test_db 数据库(授权我的 IP 并连接到这样做),测试用户和密码是否有效

  • 最后我部署了一个包含以下几行的应用程序(用于测试连接):

.

$dbh = mysqli_init();
var_dump( mysqli_real_connect( $dbh, ':/cloudsql/my_project_id:database_name', 'test_db', 'test_db', 'test_db' ) );
var_dump( mysqli_real_connect( $dbh, 'localhost:/cloudsql/my_project_id:database_name', 'test_db', 'test_db', 'test_db' ) );
var_dump( mysqli_real_connect( $dbh, 'test_db', 'test_db', 'test_db', ':/cloudsql/my_project_id:database_name', 3306 ) );
var_dump( mysqli_real_connect( $dbh, 'test_db', 'test_db', 'test_db', 'localhost:/cloudsql/my_project_id:database_name', 3306 ) );
var_dump( mysqli_real_connect( $dbh, ':/cloudsql/my_project_id:database_name', 'test_db', 'test_db', null, 3306 ) );
var_dump( mysqli_real_connect( $dbh, 'localhost:/cloudsql/my_project_id:database_name', 'test_db', 'test_db', null, 3306 ) );
var_dump( mysqli_real_connect( $dbh, null, 'test_db', 'test_db', 'test_db', ':/cloudsql/my_project_id:database_name', 3306 ) );
var_dump( mysqli_real_connect( $dbh, 'localhost', 'test_db', 'test_db', 'test_db', ':/cloudsql/my_project_id:database_name', 3306 ) );
var_dump( mysqli_real_connect( $dbh, null, 'test_db', 'test_db', 'test_db', ':/cloudsql/my_project_id:database_name' ) );
var_dump( mysqli_real_connect( $dbh, 'localhost', 'test_db', 'test_db', 'test_db', ':/cloudsql/my_project_id:database_name' ) );
var_dump( $dbh->connect_error );

如果这些行返回 False 或 Null(即它们都不起作用),有帮助吗?
(如果有解决方案,请使用 mysqli_real_connect() 保留它,因为这是 WordPress 使用的)

更新:新错误
目前我正在使用这条线:

var_dump( mysqli_real_connect( $dbh, 'localhost', 'test_db', 'test_db', 'test_db', 3306, 'mysql:unix_socket=/cloudsql/my_project_id:database_name' ) );

我收到以下错误

无法找到套接字传输“unix” - 您是否忘记启用 是你配置PHP的时候吗?

【问题讨论】:

    标签: php google-app-engine


    【解决方案1】:

    基于https://cloud.google.com/appengine/docs/php/cloud-sql/,假设您已经创建了用户“test_db”,密码为“test_db”,可以访问数据库“test_db”,您应该这样做

    mysqli_real_connect( $dbh, null, 'test_db', 'test_db', 'test_db', null, '/cloudsql/<your-project-id>:<your-instance-name>');
    

    【讨论】:

    • 也不起作用。我认为现在要解决的主要错误是我在问题底部提到的错误:“无法找到套接字传输“unix” - 您在配置 PHP 时是否忘记启用它?”
    • 您使用此连接时的错误消息是什么?我还假设您已经在 CloudSQL 中创建了相应的用户和数据库?
    • 这就是我现在得到的:“用户'test_db'@'localhost'的访问被拒绝(使用密码:YES)”这没有意义,因为我能够使用phpmyadmin(通过IP地址,但我宁愿使用unix套接字,因为它显然更安全..)
    • SOLVED! - mysqli_real_connect( $dbh, null, 'test_db', null, 'test_db', null, '/cloudsql/&lt;your-project-id&gt;:&lt;your-instance-name&gt;') - 将密码保留为“null”即可解决!