2011-08-19 42 views
1

我希望Codeigntier连接到另一台服务器(不是本地主机)上的MySQL数据库。我如何在config/database.php文件中配置它?无法使用Codeigntier连接到外部数据库

我将主机名设置为具有正确用户名/密码的IP地址,但它不起作用。

我得到的错误说:使用所提供的设置无法连接到数据库服务器:

数据库发生错误。

+1

你能在命令行连接到远程MySQL服务器上的本地服务器? (即通过mysql命令?)可能需要为该特定主机授予priv。 –

+0

您的远程数据库服务器是否允许外部连接?也许你需要检查你的防火墙设置或你的数据库用户设置 – liamgriffiths

+0

就像Alex和Liam告诉你的,这可能是外部连接权限的问题。如果你使用cPanel,你可以在“Remote MySQL”上添加一个通配符“%”。如果这不起作用,请联系您的技术支持。 – juanrossi

回答

0

Triq,

您可以像另一组数据库的配置添加到您的config/database.php文件(在你的default集的顶部)以下的(你可以改变dbwrite到其他你喜欢的名字):

$dbw = $this->load->database('dbwrite',TRUE); 
$dbw->query(xxx); // this will execute the query on the other db 
$db['dbwrite']['hostname'] = "[other db host]"; 
$db['dbwrite']['username'] = "[other db username]"; 
$db['dbwrite']['password'] = "[other db password]"; 
$db['dbwrite']['database'] = "[other db name]"; 
$db['dbwrite']['dbdriver'] = "mysql"; 
$db['dbwrite']['dbprefix'] = ""; 
$db['dbwrite']['pconnect'] = FALSE; 
$db['dbwrite']['db_debug'] = FALSE; 
$db['dbwrite']['cache_on'] = FALSE; 
$db['dbwrite']['cachedir'] = ""; 
$db['dbwrite']['char_set'] = "utf8"; 
$db['dbwrite']['dbcollat'] = "utf8_general_ci"; 

然后,您可以使用下面的代码完成这dB参考

确保dbwrite与您在其他数据库配置中使用的名称相同。 $this是指$CI实例。

+0

这没有解决问题,我只想改变我现在没有添加新的配置。 – triq

+0

当前配置指向一个本地数据库我想连接到anotehr服务器上的另一个 – triq

+1

@triq我不知道你是否尝试使用'mysql_connect'函数正常的php文件来测试吗? 当您使用命令行进行测试时,您使用的是什么用户权限(root?)? –

3

Heru,好像你只是想将当前的数据库配置从本地主机改为你的活动服务器。执行此操作,在application/config文件夹中打开database.php文件。然后找到这些线。

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = 'root'; 
$db['default']['password'] = ''; // might be empty or might be full 
$db['default']['database'] = 'your_database'; 

并将其更改为此。 。 。

$db['default']['hostname'] = 'your_host_name'; 
$db['default']['username'] = 'your_user_name'; 
$db['default']['password'] = 'your_password'; 
$db['default']['database'] = 'your_new_database'; 

取决于您是否在共享主机上或其他因素。您的主机可能会为您提供新的主机名,可能需要密码并可能为您提供预配置的数据库名称。查看主机提供商的这些信息。

如果不起作用。 。 。

您也可以尝试将其更改为可以找到您的服务器IP并将其转换为指定地址的数据库,但您的数据库可能位于或不位于不同的地址。但值得一试。

$hostIP = $_SERVER['SERVER_ADDR']; 
(string)$hostname = gethostbyaddr($hostIP); 

$db['default']['hostname'] = $hostname; 
$db['default']['username'] = 'your_user_name'; 
$db['default']['password'] = 'your_password'; 
$db['default']['database'] = 'your_new_database'; 

此外,如果你自信你的数据库的IP,改变上述

(string)$hostname = gethostbyaddr($hostIP)

(string)$hostname = gethostbyaddr('10.11.12.123'); // with your IP #

1

这在我看来是一个数据库权限的问题,而不是一个CI问题。您可能无权从您的IP连接。当你一些随机的PHP页面上运行此会发生什么:

mysql_connect($server, $un, $pw) or die(mysql_error()); 

为了解决这个问题,只需运行:

GRANT SELECT, DELETE, UPATE, INSERT ON $dbname.% TO [email protected]% IDENTIFIED BY ('$pw') 
-1
You can easily Crated multiple database connection using codeigniter 

    $db['default']['hostname'] = "localhost:3306"; 
    $db['default']['username'] = "root"; 
    $db['default']['password'] = ""; 
    $db['default']['database'] = "buy599_erp"; 
    $db['default']['dbdriver'] = "mysql"; 
    $db['default']['dbprefix'] = ""; 
    $db['default']['pconnect'] = TRUE; 
    $db['default']['db_debug'] = TRU`enter code here`E; 
    $db['default']['cache_on'] = FALSE; 
    $db['default']['cachedir'] = ""; 
    $db['default']['char_set'] = "utf8"; 
    $db['default']['dbcollat'] = "utf8_general_ci"; 

    $db['magento6']['hostname'] = "localhost:3306"; 
    $db['magento6']['username'] = "root"; 
    $db['magento6']['password'] = ""; 
    $db['magento6']['database'] = "magento6"; 
    $db['magento6']['dbdriver'] = "mysql"; 
    $db['magento6']['dbprefix'] = ""; 
    $db['magento6']['pconnect'] = TRUE; 
    $db['magento6']['db_debug'] = TRUE; 
    $db['magento6']['cache_on'] = FALSE; 
    $db['magento6']['cachedir'] = ""; 
    $db['magento6']['char_set'] = "utf8"; 
    $db['magento6']['dbcollat'] = "utf8_general_ci"; 

    $db['magento6stalkbuylove']['hostname'] = "localhost:3306"; 
    $db['magento6stalkbuylove']['username'] = "root"; 
    $db['magento6stalkbuylove']['password'] = ""; 
    $db['magento6stalkbuylove']['database'] = "magento6stalkbuylove"; 
    $db['magento6stalkbuylove']['dbdriver'] = "mysql"; 
    $db['magento6stalkbuylove']['dbprefix'] = ""; 
    $db['magento6stalkbuylove']['pconnect'] = TRUE; 
    $db['magento6stalkbuylove']['db_debug'] = TRUE; 
    $db['magento6stalkbuylove']['cache_on'] = FALSE; 
    $db['magento6stalkbuylove']['cachedir'] = ""; 
    $db['magento6stalkbuylove']['char_set'] = "utf8"; 
    $db['magento6stalkbuylove']['dbcollat'] = "utf8_general_ci";