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

时间:2013-11-17 15:21:22

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

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

  1. 我离开数据库用户名,密码&数据库名称为空,但具有数据库调用的页面显示错误。它说没有选择数据库。
  2. 我注意到我的数据库没有创建并创建了一个新数据库和一个拥有所有权限的用户。我在我的应用程序中输入了此详细信息,现在它甚至连接到数据库服务器。没有页面服务。
  3. 当我只删除用户名& database.php中的密码字段,它连接到数据库服务器,但是没有连接到数据库。
  4. 我检查了mysql数据库中的用户,我的用户拥有所有权限。我检查了所有拼写,这是正确的。该应用程序在本地工作。我如何修复此问题?我无法让它连接起来。

2 个答案:

答案 0 :(得分:7)

开箱即用CodeIgniter不会连接到Google Cloud SQL实例,因此需要修改CI数据库驱动程序文件,这是因为CI希望它可以选择连接到localhost或远程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(或要声明数据库设置的wherver) - 根据您的应用程序,您可以选择将“database”添加到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提供答案

答案 1 :(得分:0)

您是否已授权您的appengine应用程序访问Cloud SQL实例?转到实例的控制台上的访问控制面板(在https://cloud.google.com/console#/project/ {project name} / sql / instances / {instance name} / access-control)。寻找授权的应用引擎应用程序。

否则,如果您成功连接到实例,则必须从代码或配置中选择数据库(取决于应用程序)。例如,从“运行wordpress”指南(https://developers.google.com/appengine/articles/wordpress),您必须定义DB_NAME。如果您在自己的代码中处理连接,则需要使用mysql_select_db。

从略读codeigniter文档,看起来你需要像:  $ config ['database'] =“mydatabase”;

我不熟悉这个框架,所以请自己查看文档(http://ellislab.com/codeigniter/user-guide/database/configuration.html)。