Nag*_*Nag 0 mysql database google-app-engine codeigniter google-cloud-sql
我在Google App Engine上的CodeIgniter应用无法连接到Google Cloud SQL上的数据库.我尝试了很多东西.
我检查了mysql数据库的用户,我的用户拥有所有权限.我检查了所有拼写,这是正确的.该应用程序在本地工作.我如何修复此问题?我只是无法连接它.
小智 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);
}
}
Run Code Online (Sandbox Code Playgroud)
步骤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’;
Run Code Online (Sandbox Code Playgroud)
Viola,您的CodeIgniter应用程序现在应该能够连接并与您的Google Cloud MySQL数据库通信!
现在,如果你想真正想要并启用数据库缓存,可以更改CI代码以使用memcache(最快)或Google Cloud Storage(更有保证的持久性),但我不会在此博客中介绍...
答案由http://arlogilbert.com/post/67855755252/how-to-connect-a-codeigniter-project-to-google-cloud提供