mysql - 如何使用 CodeIgniter 连接到 Google Cloud SQL 数据库?

标签 mysql database codeigniter google-app-engine google-cloud-sql

我在 Google App Engine 上的 CodeIgniter 应用程序无法连接到我在 Google Cloud SQL 上的数据库。我尝试了很多东西。

  1. 当我将数据库用户名、密码和数据库名称留空时,我的网站会加载,但是调用数据库的页面会显示错误。它说没有选择数据库。
  2. 我注意到我的数据库没有创建,而是创建了一个新数据库和一个拥有所有权限的用户。我在我的应用程序中输入了这些详细信息,现在它甚至没有连接到数据库服务器。没有页面服务。
  3. 当我只删除 database.php 中的用户名和密码字段时,它会连接到数据库服务器,但不会连接到数据库。

我检查了用户的mysql数据库,我的用户拥有所有权限。我检查了所有拼写,它是正确的。该应用程序在本地运行。我该如何解决这个问题?我就是无法连接它。

最佳答案

开箱即用的 CodeIgniter 不会连接到 Google Cloud SQL 实例,需要修改 CI 数据库驱动程序文件,这是因为 CI 期望它的选择是连接到本地主机或远程 tcpip 主机,开发人员从未预料到有人会想要直接连接到套接字。

出于性能原因,我选择使用 Mysqli 驱动程序而不是 Mysql,这是我的做法:

第 1 步)编辑 codeigniter/system/database/drivers/mysqli/mysqli_driver.php 文件并将 db_connect 函数替换为以下代码:

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

第 2 步)更改您的应用程序的 config/database.php(或您想要声明数据库设置的任何位置)- 根据您的应用程序,您可以选择将“数据库”添加到 yourapp/config/autoload 中的自动加载数组。 php 或者您可以选择手动调用 load->database() 函数。这假设您的应用程序名称是“myappname”。适本地替换 APPENGINE-ID 和 DATABASE-INSTANCE-ID 以及 YOUR_DATABASE_NAME。

$db[‘myappname’][‘hostname’] = ‘localhost’;
$db[‘myappname’][‘username’] = ‘root’;
$db[‘myappname’][‘password’] = null;
$db[‘myappname’][‘database’] = ‘YOUR_DATABASE_NAME’;
$db[‘myappname’][‘dbdriver’] = ‘mysqli’;
$db[‘myappname’][‘pconnect’] = FALSE;
$db[‘myappname’][‘dbprefix’] = ‘’;
$db[‘myappname’][‘swap_pre’] = ‘’;
$db[‘myappname’][‘db_debug’] = FALSE;
$db[‘myappname’][‘cache_on’] = FALSE;
$db[‘myappname’][‘autoinit’] = FALSE;
$db[‘myappname’][‘char_set’] = ‘utf8’;
$db[‘myappname’][‘dbcollat’] = ‘utf8_general_ci’;
$db[‘myappname’][‘cachedir’] = ”;
$db[‘myappname’][‘socket’] = ‘/cloudsql/APPENGINE-ID:DATABASE-INSTANCE-ID’;

Viola,您的 CodeIgniter 应用程序现在应该能够连接并与您的 Google Cloud MySQL 数据库通信!

现在,如果您想要真正喜欢并启用数据库缓存,请更改 CI 代码以使用 memcache(最快)或 Google Cloud Storage(更有保证的持久性),但我不会在本博客中介绍......

回答由 http://arlogilbert.com/post/67855755252/how-to-connect-a-codeigniter-project-to-google-cloud 提供

关于mysql - 如何使用 CodeIgniter 连接到 Google Cloud SQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20032393/

相关文章:

mysql - MAC 终端 - MySQL 查询最后带有参数?

php - 如何在 PHP 中编辑/管理多层条件数据

MySQL where 子句未返回预期值

.net - 在.NET 中连接来自不同源数据库的两个数据表?

php - 删除 Markdown 格式以快速摘录

jquery - PHP Codeigniter 批量更新某些字段失败

php - 使用php从mysql数据库中的数组中提取特定数据

ruby - 使用 Ruby XMLRPC 使用开发人员 key 查找 UPC 数据库

mysql - 包括数据库在内的单元测试应用程序太慢

php - SQL 到 CodeIgniter 数组丢失数据问题