2011-06-22 46 views
6

我想用編程方式創建具有CI的數據庫和用戶。到目前爲止,我有這2個簡單的MySQL語句。Codeigniter,爲MySQL創建表和用戶

CREATE DATABASE `testdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 

CREATE USER 'test_user'@'%' IDENTIFIED BY '***'; 

GRANT ALL PRIVILEGES ON * . * TO 'test_user'@'%' IDENTIFIED BY '***' WITH GRANT 
OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 
MAX_USER_CONNECTIONS 0 ; 

GRANT ALL PRIVILEGES ON `testdb` . * TO 'test_user'@'%'; 

可以將這些轉化爲活動記錄,或不CI提供了自己創建用戶/表的方式嗎?我搜索文檔,但沒有找到任何東西...

編輯:我這樣做,因爲企業內部網應用,因此沒有提及許可

回答

4

的CodeIgniter提供了一個稱爲Database Forge類的擔憂,它包含了一些功能,這可用於對您的數據庫執行基本維護。

$this->load->dbforge() 

if ($this->dbforge->create_database('my_db')) 
{ 
    echo 'Database created!'; 
} 

和關於添加用戶,它的可能性,但我不知道它是否是一個好的做法。

並確保運行查詢的mysql用戶具有創建數據庫的權限。

$data = array(
    'Host' => 'localhost' , 
    'User' => 'krish' , 
    'Password' => 'somepass', 
    'Select_priv' => 'Y', 
    'Insert_priv' => 'Y' 
); 

$this->db->insert('mysql.user', $data); 
+0

謝謝,克里斯,但從第一次檢查它只提供了一種方式來創建表,而不是用戶 –

+0

編輯答案..但我真的不知道,如果它是一個很好的做法或不。 – Vamsi

+1

它的工作原理,但我不得不改變'db-> insert('user',$ data);''db-> insert('mysql.user',$ data);' –

2

如果我理解,你可以嘗試

$config['database'] = 'mysql'; 
// other config details e.g username. port, pass 

$this->load->database($config); 
$query = "INSERT INTO user (host, user, password, select_priv, 
      insert_priv, update_priv) 
      VALUES ('localhost', 'user', PASSWORD('mypass'), 'Y', 'Y', 'Y')"; 
$this->db->query($query); 

我的語法可能有點過。

本質上 - 使用mysql數據庫,直接插入到user表中。

但是,有些主機可能會拒絕訪問此directy。

+0

嗯,聰明:)就像我更新我的問題,沒有權限問題...我會嘗試你的邏輯出來,讓你知道它是否有效 –

+1

謝謝羅斯,它的工作原理,但我會接受克里希的答案,因爲它更完整。再次感謝 –