2011-09-06 126 views
0

我試着Kohana爲php應用程序,並且當連接到MySql的本地主機安裝時,我有一個簡單的數據庫測試工作。但是,當我嘗試更改連接到Web主機(Surftown)上的遠程MySql數據庫時,它不起作用。無法連接到Kohana的遠程MySql服務器

這裏是連接數據從database.php中(「默認」連接):

 'hostname' => 'mydb23.surftown.se', 
     'database' => 'andclic_app', 
     'username' => 'myusername', 
     'password' => 'mypassword', 
     'persistent' => FALSE, 

然後我嘗試這在我的控制器:

$default = Database::instance('default'); 
$result = $default->query(Database::SELECT, 'SELECT * FROM products', TRUE); 

,但我得到一個錯誤說沒有連接:

62  catch (Exception $e) 
63  { 
64   // No connection exists 
65   $this->_connection = NULL; 
66 
67   throw new Database_Exception(':error', 
68    array(':error' => $e->getMessage()), 
69    $e->getCode()); 
70  } 
71 
72  // \xFF is a better delimiter, but the PHP driver uses underscore 

那麼我在做什麼錯了?我也嘗試使用ip號碼而不是主機名稱,我嘗試追加端口(:3306),但都沒有幫助。

+0

數據庫是否接受本地主機以外的連接? – CodeCaster

+0

好問題,我還沒有開始上傳到服務器,但我現在做了,它從服務器上正常工作。但是,我已經在Web主機上添加了我的IP作爲例外,以允許從本地主機進行訪問。當我連接到NaviCat或Visual Studio時,這就很有效。但是,當通過本地主機運行時,不能從php應用程序中... – Anders

+0

@但是隻有低調的問題:爲什麼downvote?如果你覺得它有什麼問題,你至少應該評論一下爲什麼,我怎麼能知道你認爲是錯誤的? – Anders

回答

1

確保你能夠連接到遠程MySQL服務器而不需要Kohana。很少有其他提示:

Database::instance('default'); 

您不必指定default,這是default默認。

$default->query(Database::SELECT, 'SELECT * FROM products', TRUE); 

請確保您撥打->execute()方法來運行查詢。

2

當您激活php以顯示不建議使用的錯誤時,會發生此問題。 mysql驅動程序基於已被棄用的mysql_connect庫。當你的php在這個庫上拋出不推薦的錯誤時,Kohana類不能處理這個錯誤。 爲了避免這種錯誤,你需要在添加以下代碼行: 模塊 - >數據庫 - >類 - > kohana->數據庫 - > mysql.php

查找下面一行代碼:

// Prevent this information from showing up in traces 
    unset($this->_config['connection']['username'], $this->_config['connection']['password']); 

以下行添加到該文件的前行之後:

//Added to suppress deprecated error due to deprecated driver 
    error_reporting(E_ALL^E_DEPRECATED); 

加入這一行後,廢棄的錯誤代碼將被抑制,您將能夠使用的mysql_connect擴展。

這是一個臨時的解決方法,因爲最終你需要將代碼遷移到新的支持擴展mysqlite

發生primariy與PHP的latests版本此問題。您不會在舊版本的php中遇到此行爲。

希望這可以幫助我花了一段時間來弄清楚這一點。