首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Google App Engine中连接到Google Cloud SQL

在Google App Engine中连接到Google Cloud SQL
EN

Stack Overflow用户
提问于 2019-10-16 22:43:31
回答 3查看 707关注 0票数 2

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

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

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

我还不知道确切的联系方式,一点也不成功。任何知道如何使用mysqli_connect()到Cloud SQL的人都会很棒。

使用其中一个答案进行编辑后,仍然不起作用:

代码语言:javascript
运行
复制
 //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); 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-18 02:30:48

最后,我使用PDO方法连接到了我的Cloud SQL。

代码语言:javascript
运行
复制
$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文件配置

票数 0
EN

Stack Overflow用户

发布于 2019-10-16 22:59:28

没有什么特别的原因你不能使用mysqli_connect

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

看一看cloud sql documentation here,您应该能够适应PHP语法。

Node.js设置如下所示:

代码语言:javascript
运行
复制
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可能如下所示:

代码语言:javascript
运行
复制
$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);
票数 2
EN

Stack Overflow用户

发布于 2019-10-16 22:58:10

要将您的App Engine连接到您的Cloud SQL实例,您只需在App.yaml文件中指定您的Cloud SQL实例的用户名、密码和域名,示例如下:

代码语言:javascript
运行
复制
# 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58416013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档