2011-06-22 25 views
6

Quiero crear bases de datos y usuarios con CI programáticamente. Hasta ahora tengo estas 2 declaraciones simples de MySQL.Codeigniter, crear tablas y usuarios para MySQL

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

y

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'@'%'; 

Pueden aquellos convertir en Active Record, o hace CI proporciona su propia manera de crear usuarios/tablas? busco los documentos y no pude encontrar nada ...

EDITAR: Lo hago como una aplicación de intranet por lo que no se preocupa por los permisos

Respuesta

4

CodeIgniter provee una clase llamada como Database Forge, que contiene algunas funciones que se puede usar para realizar mantenimiento básico en su base de datos.

$this->load->dbforge() 

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

y en relación con la adición de usuarios, es posible, pero no sé si es una buena práctica o no.

y también asegurarse de que el usuario de MySQL que dirige las consultas tiene los permisos para crear db.

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

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

gracias, Krish, pero a partir de los primeros controles que sólo proporciona una forma de crear tablas, no a los usuarios –

+0

editado el answer..but Realmente donno si es una buena práctica o no. – Vamsi

+1

funciona pero tuve que cambiar 'db-> insert ('usuario', $ datos);' a 'db-> insert ('mysql.user', $ data);' –

2

si entiendo, puede intentar

$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); 

Mi sintaxis podría ser un poco apagado.

Básicamente, utilice la base de datos mysql, inserte directamente en la tabla user.

Algunos anfitriones pueden denegar el acceso a este o directamente, sin embargo.

+0

hmmm, inteligente :) al igual que me actualicé en mi pregunta, sin problemas de permisos ... voy a probar su lógica y déjame saber si funciona –

+1

gracias Ross, funciona, pero voy a aceptar la respuesta de Krish ya que es más completa.gracias de nuevo –

Cuestiones relacionadas