Подключение к Google Cloud SQL в Google App Engine - PullRequest
1 голос
/ 16 октября 2019

В основном я развертываю простой веб-сайт с регистрацией и входом в систему. Я развернул в AppEngine, и мой Cloud SQL находится в том же проекте AppEngine. Проект: http://cc -lab4.appspot.com / register.php

Я создал базу данных и таблицу в Cloud SQL, я хочу, чтобы мой register.php подключался к облачной базе данных sql ивыполнить запрос вставки.

Я действительно хочу использовать mysqli_connect (), так как я знаком с этим, соединение с PDO является новым для меня.

Я пока не знаю точный способ подключения, но не удалосьвсе. Любой, кто знает, как использовать mysqli_connect () в облачном SQL, будет отличным решением.

После редактирования с использованием одного из ответов все равно не получится: Cloud SQL Database Instance

 //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); 

Ответы [ 3 ]

2 голосов
/ 16 октября 2019

Нет конкретной причины, по которой вы не можете использовать 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);
0 голосов
/ 17 октября 2019

В итоге мне удалось подключиться к облачному SQL с помощью метода PDO.

$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 enter image description here

0 голосов
/ 16 октября 2019

Чтобы подключить ваш App Engine к экземпляру Cloud SQL, вам просто нужно указать пользователя, пароль и DNS вашего экземпляра Cloud SQL в файле App.yaml, вот пример:

# 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"

Для получения дополнительной информации вы можете найти руководство по быстрому запуску App Engine в php

...