首页 > 解决方案 > 在 Google App Engine 中连接到 Google Cloud SQL

问题描述

基本上我正在部署一个具有注册和登录功能的简单网站。我已经部署到 AppEngine 并且我的 Cloud SQL 在同一个 AppEngine 项目中。项目:http ://cc-lab4.appspot.com/register.php

我在 Cloud SQL 中创建了数据库和表,我希望我的 register.php 连接到云 sql 数据库并执行插入查询。

我真的很想使用 mysqli_connect() 因为我对此很熟悉,PDO 连接对我来说是新的。

我还不知道确切的连接方式,根本没有成功。任何人都知道如何将 mysqli_connect() 用于 Cloud SQL 会很棒。

使用其中一个答案进行编辑后,仍然无法正常工作: Cloud SQL 数据库实例

 //Variables for Database connection
 $user = "root";
 $pw = "root";
 $socket = '/cloudsql/'. $ENV{"cc-lab4:australia-southeast1:my-sql-artworks"};
 $dbname = "artworks";

 //Registration values from <Form>
 $username = $_POST['username'];
 $password = $_POST['password'];

 //Database connection
 $db = mysqli_connect(NULL, $user, $pw, $dbname, NULL, $socket);

 if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
 }

 //Table Member (id, username,password,reg_date)
 $q = "insert into member values(null, '$username', SHA('$password'), now())";
 mysqli_query($db, $q); 

标签: phpmysqlgoogle-app-enginemysqligoogle-cloud-sql

解决方案


没有你不能使用的具体原因mysqli_connect

我确实看到您的数据库用户变量是user而不是$user可能是一个问题。

在这里查看cloud sql 文档,您应该能够适应 PHP 语法。

Node.js 设置如下所示:

let pool;
const createPool = async () => {
  pool = await mysql.createPool({
    user: process.env.DB_USER, // e.g. 'my-db-user'
    password: process.env.DB_PASS, // e.g. 'my-db-password'
    database: process.env.DB_NAME, // e.g. 'my-database'
    // If connecting via unix domain socket, specify the path
    socketPath: `/cloudsql/${process.env.CLOUD_SQL_CONNECTION_NAME}`,
    // If connecting via TCP, enter the IP and port instead
    // host: 'localhost',
    // port: 3306,

    //...
  });
};
createPool();

所以关键的观察是套接字的连接名称存储在环境变量中。

您的 PHP 可能如下所示:

$user = "whatever_user";
$password = "whatever_password";
$dbname = "whatever_database";
$socket = '/cloudsql/'.$ENV{"CLOUD_SQL_CONNECTION_NAME"};
$database = mysqli_connect(NULL, $user, $password, $dbname, NULL, $socket);

推荐阅读