2011-06-20 59 views
2

框架上通過連接在database.php中我有:笨數據庫不會只有一臺服務器

$db['default']['username'] = IS_PRODUCTION ? 'prodUsername' : 'localDevBoxUsername'; 
$db['default']['password'] = IS_PRODUCTION ? 'prodPassword' : 'localDevBoxPassword'; 

我的代碼是:

function test() 
{ 
    $this->load->database(); 
    $result = $this->db->query('SELECT * FROM items WHERE description='Oranges'); 
    echo 'rows:' . $result->num_rows(); 
} 

當我在督促它無法運行此。

我們測試它不是一個數據庫配置的問題,我創建了一個名爲test.php的一個基本的PHP文件:

<? 
if (! [email protected]_connect ("localhost", "prodUsername", "prodPassword")) 
    die("Error connecting to mysql"); 

@mysql_select_db("prodDatabase") or die("error connecting to specific database"); 

$result = @mysql_query('SELECT * FROM items WHERE description='Oranges'); 
echo 'rows: ' . mysql_num_rows($result); 
?> 

PHP的測試腳本完美的作品。 codeigniter代碼只適用於我的本地開發盒,但不適用於prod盒。我可能會失去什麼?

更新:請注意,雖然我在示例代碼中使用常量IS_PRODUCTION,但這不是問題。我已經拿出了這些價值觀並將他們硬連線。我只是將它包括在內,以使示例更加簡潔,它表明它可以在一種環境中使用,而不會在其他環境中使用。

Update2:此問題似乎只與模型有關。只要我把代碼移動到控制器上,它就可以工作...

回答

0

問題竟然是用於模型的文件名的命名約定。在我的本地開發環境中CodeIgniter所要求的區分大小寫不是出於任何原因(PHP中的一些配置等,我不知道 - 我在這個特定的項目中使用xmapp進行本地桌面開發)。一旦模型文件根據Co​​deIgniter規範命名,一切都按計劃進行。

因此,如果你的數據庫代碼在控制器中工作,但不在模型中,那麼一定要確認你的模型文件命名約定(以及類構造函數)。

3

CodeIgniter 2.0爲此提供了更多的靈活性。在application/config目錄中創建一個名爲development和production的文件夾,並將config.php,database.php複製到這些文件夾中。

檢查根文件夾中的index.php文件。

define('ENVIRONMENT', 'development'); 

從現在起,只要ENVIROMENT定義爲development,你的項目找的application/config /開發目錄。如果將其更改爲生產,它將使用application/config/production。

0

我想你在三元運算符中檢查這樣的常量(如果常量未定義,則返回FALSE,請參見php手冊中的CONSTANTS)。 但我不知道你在哪裏定義IS_PRODUCTION,所以發佈的其他解決方案看起來更好,以便分離環境。

$db['default']['username'] = defined('IS_PRODUCTION') ? 'prodUsername' : 'localDevBoxUsername'; 
$db['default']['password'] = defined('IS_PRODUCTION') ? 'prodPassword' : 'localDevBoxPassword'; 

constant('IS PRODUCTION')(但如果沒有定義,這將返回NULL)

相關問題