【问题标题】: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 不起作用。

我已经查看了许多 stackoverflow 类似的问题,并彻底研究了 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";

 }

【讨论】:

    猜你喜欢
    • 2019-11-27
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多