2011-08-19 92 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";