【问题标题】:Codeigniter + AppEngine + CloudSQL (HY000/2002): No such file or directory Filename: mysqli/mysqli_driver.phpCodeigniter + AppEngine + CloudSQL (HY000/2002):没有这样的文件或目录文件名:mysqli/mysqli_driver.php
【发布时间】:2018-08-08 14:52:25
【问题描述】:

我正在尝试将我使用 codeigniter 所做的项目与 cloudSQL 连接,但我总是给出此错误

消息:

mysqli_connect(): (HY000/2002): 没有那个文件或目录

文件名:mysqli/mysqli_driver.php

行号:120

这是我的代码:

MysqliDrive:

function db_connect()
{
    if(isset($this->socket)){
        return mysqli_connect(null, $this->username, null, $this->database, null, $this->socket);
    }
    elseif ($this->port != '')
    {
        return mysqli_connect($this->hostname, $this->username, $this->password, $this->database, $this->port);
    }
    else
    {
        return mysqli_connect($this->hostname, $this->username, $this->password, $this->database);
    }
}

And my file database.php
$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
        'dsn'   => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => 'xxxxxxxx',
        'database' => 'dbname',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => FALSE,
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE,
        'socket' => '/cloudsql/id:id'
);

【问题讨论】:

  • The documentation -point 2.- for App Engine Flex 连接到 Cloud SQL 建议 DSN 的特定值。试试看,告诉我
  • @Fellipe Augusto 你找到解决这个问题的方法了吗?
  • 是的,我尝试在 dev 中运行,但在生产中工作正常

标签: php codeigniter google-app-engine google-cloud-sql


【解决方案1】:

config/database.php

$active_group = 'default';

$query_builder = TRUE;

$username = getenv('DB_USER');

$password = getenv('DB_PASS');

$dbName = getenv('DB_NAME');

$hostname = getenv('DB_HOSTNAME');

$cloud_sql_connection_name = getenv('CLOUD_SQL_CONNECTION_NAME');

$dsn = sprintf(
            'mysql:dbname=%s;unix_socket=/cloudsql/%s',
            $dbName,
            $cloud_sql_connection_name
        );
$db['default'] = array(
'dsn' => $dsn,
'hostname' => null,
'username' => 'root',
'password' => '******',
'database' => '*****',
'dbdriver' => 'pdo',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' =>  FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

或者这是您可以在其中看到的 app.yaml(请注意主行 nospace 和子行 2 空格的空格,如您在此中看到的)

runtime: php
env: flex

env_variables:
  CLOUD_SQL_CONNECTION_NAME: "CLOUD_SQL_CONNECTION_NAME FROM SQL DASHBOARD"
  DB_USER: root
  DB_PASS: socially@123*#
  DB_NAME: new_data

beta_settings:
  cloud_sql_instances: "CLOUD_SQL_CONNECTION_NAME FROM SQL DASHBOARD"

runtime_config:
  document_root: .

handlers:
 # Serve a directory as a static resource.
- url: /assets
  static_dir: assets


  # Serve images as static resources.
- url: /(.+\.(gif|png|jpg))$
  static_files: \1
  upload: .+\.(gif|png|jpg)$

- url: /vendor
  static_dir: vendor
- url: /credt
  static_dir: credt
- url: /up
  static_dir: up

# Serve your app through a front controller at index.php or public/index.php.
- url: .*
  script: auto

如果你是标准环境,这是 app-standard.yaml(你也可以在 flex 中使用)

runtime: php72

# Remember - storing secrets in plaintext is potentially unsafe. Consider using
# something like https://cloud.google.com/secret-manager/ to help keep secrets secret.
env_variables:
  CLOUD_SQL_CONNECTION_NAME: CLOUD_SQL_CONNECTION_NAME 
  DB_USER: root
  DB_PASS: socially@123*#
  DB_NAME: data_new

祝你有美好的一天

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 2017-06-12
    • 2020-05-07
    相关资源
    最近更新 更多