在 Google App Engine 中连接到 Google 云 SQL
Connecting to Google Cloud SQL in Google App Engine
基本上,我部署的是一个简单的网站,需要注册和登录。
我已经部署到 AppEngine 中,我的 Cloud SQL 在同一个 AppEngine 项目中。项目:http://cc-lab4.appspot.com/register.php
我在云 SQL 中创建了数据库和 table,我希望我的 register.php 连接到云 sql 数据库并执行插入查询。
我真的很想用 mysqli_connect() 因为我很熟悉这个,PDO 连接对我来说是新的。
我还不知道具体的连接方式,一直没成功。
任何人都知道如何使用 mysqli_connect() 到 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);
要将您的 App Engine 连接到您的云 SQL 实例,您只需在 App.yaml 文件中指定您的云 SQL 实例的用户、密码和 DNS,这里是一个例子:
# Use the PHP 7.3 runtime (BETA) by replacing "php72" below with "php73"
runtime: php72
env_variables:
# Replace USER, PASSWORD, DATABASE, and CONNECTION_NAME with the
# values obtained when configuring your Cloud SQL instance.
CLOUDSQL_USER:
CLOUDSQL_PASSWORD:
CLOUDSQL_DSN: "mysql:dbname=DATABASE;unix_socket=/cloudsql/CONNECTION_NAME"
有关更多信息,您可以在 php
中查看 App Engine 的 quickstart guide
没有特定原因不能使用 mysqli_connect
。
我确实看到您的数据库用户变量是 user
而不是 $user
,这可能是个问题。
看看 cloud sql documentation here ,你应该能够适应 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);
最后,我成功地使用 PDO 方法连接到我的云 SQL。
$dsn = getenv('MYSQL_DSN');
$user = getenv('MYSQL_USER');
$pw = getenv('MYSQL_PASSWORD');
//Database connection
$db = new PDO($dsn, $user, $pw);
//register value from <form> inputs
$username = $_POST['username'];
$password = $_POST['password'];
//insertion success
$statement = $db->prepare("insert into member values(null, '$username', SHA('$password'), now())");
$statement->execute();
我的.yaml文件配置
基本上,我部署的是一个简单的网站,需要注册和登录。 我已经部署到 AppEngine 中,我的 Cloud SQL 在同一个 AppEngine 项目中。项目:http://cc-lab4.appspot.com/register.php
我在云 SQL 中创建了数据库和 table,我希望我的 register.php 连接到云 sql 数据库并执行插入查询。
我真的很想用 mysqli_connect() 因为我很熟悉这个,PDO 连接对我来说是新的。
我还不知道具体的连接方式,一直没成功。 任何人都知道如何使用 mysqli_connect() 到 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);
要将您的 App Engine 连接到您的云 SQL 实例,您只需在 App.yaml 文件中指定您的云 SQL 实例的用户、密码和 DNS,这里是一个例子:
# Use the PHP 7.3 runtime (BETA) by replacing "php72" below with "php73"
runtime: php72
env_variables:
# Replace USER, PASSWORD, DATABASE, and CONNECTION_NAME with the
# values obtained when configuring your Cloud SQL instance.
CLOUDSQL_USER:
CLOUDSQL_PASSWORD:
CLOUDSQL_DSN: "mysql:dbname=DATABASE;unix_socket=/cloudsql/CONNECTION_NAME"
有关更多信息,您可以在 php
中查看 App Engine 的 quickstart guide没有特定原因不能使用 mysqli_connect
。
我确实看到您的数据库用户变量是 user
而不是 $user
,这可能是个问题。
看看 cloud sql documentation here ,你应该能够适应 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);
最后,我成功地使用 PDO 方法连接到我的云 SQL。
$dsn = getenv('MYSQL_DSN');
$user = getenv('MYSQL_USER');
$pw = getenv('MYSQL_PASSWORD');
//Database connection
$db = new PDO($dsn, $user, $pw);
//register value from <form> inputs
$username = $_POST['username'];
$password = $_POST['password'];
//insertion success
$statement = $db->prepare("insert into member values(null, '$username', SHA('$password'), now())");
$statement->execute();
我的.yaml文件配置