【问题标题】:Unable to Connect Google App Engine and Google Cloud SQL无法连接 Google App Engine 和 Google Cloud SQL
【发布时间】:2015-12-18 17:30:06
【问题描述】:

我一直在尝试连接到在 Google App EngineGoogle Cloud SQL. 中运行的示例 PHP hello world 应用程序

我正在尝试测试示例数据库连接。使用像Navicat 这样的外部客户端我可以获得访问权限,但是,将应用程序直接连接到云 sql 不起作用。

我已经查看了许多 * 类似的问题,并彻底研究了 google 提供的示例,但没有运气。

在这里,您可以看到 hello world 文件,其中包含三个不同尝试连接到 sql db 的输出,我也在回显每个对象的 json ......它返回为空或 null。

https://beaming-glyph-107521.appspot.com/

我不知道这里还能做什么

我的 Google 应用可以访问 Cloud SQL 实例:

我现在我的用户 sql 用户是 root 并且密码为空,但我也尝试了一个具有已定义密码的用户 - 仍然没有运气。

     <?php

     ini_set('display_errors',1);
     ini_set('display_startup_errors',1);
     error_reporting(-1);

       echo 'Hello, world!';

     //Copied and Pasted straight from the provided connection strings in Cloud SQL
     // Using PDO_MySQL (connecting from App Engine)
     $db = new pdo('mysql:unix_socket=/cloudsql/beaming-glyph-107521:testdb',
         'root',  // username
         ''       // password
     );

     // Using mysqli (connecting from App Engine)
     $sql = new mysqli(
         null, // host
         'root', // username
         '',     // password
         '', // database name
         null,
         '/cloudsql/beaming-glyph-107521:testdb'
     );

     // Using MySQL API (connecting from App Engine)
     $conn = mysql_connect(':/cloudsql/beaming-glyph-107521:testdb',
         'root', // username
         ''      // password
     );

     echo "<br><br/>pdo connection: ".json_encode($db);
     echo'<br><br/> msqli connection: '.json_encode($sql);
     echo '<br><br/> mysql conn: '.json_encode($conn);

【问题讨论】:

  • 听起来您需要在开发人员控制台中设置访问令牌。有关说明,请参见此处:developers.google.com/identity/protocols/OAuth2ServiceAccount
  • 感谢 Joshua 的回复,您可能是正确的,但在任何地方都没有提及访问令牌。这是连接 GAE 和 GCSQL 的官方文档的链接,列出了分步说明,但未提供访问令牌 goo.gl/BExXCz。此外,我认为当您“授权”应用程序时,该授权将取代通常由访问令牌提供的任何授权。
  • 很高兴你知道了。

标签: php google-app-engine google-cloud-platform google-cloud-sql


【解决方案1】:

问题在于使用 jsonencode() 来显示 db 对象。无论出于何种原因,它都将其显示为空白,而实际上它确实存在。经过几个小时的调查,我能够在创建 db 对象后立即运行查询并显示结果。

总之,看起来我一直在联系。如果您尝试调试 db 连接,请尝试运行测试查询并在创建 db 对象后立即显示结果以测试连接。

    $db = new pdo('mysql:unix_socket=/cloudsql/table-1075:testdb;dbname=sampledb',
'root',  // username
''       // password
  );

 var_dump($db);
 $sql='SELECT * FROM table';
 foreach ($db->query($sql) as $row) {
 print $row['Index'] . "\t";

 }

【讨论】: