Observei
que a maioria dos programadores PHP utiliza MySQL e, para
começar a usar o MongoDB, necessita de uma
base de dados, para começar a programar sua funções. Com
isso, tive a idéia de criar um conversor simples de MySQL
para MongoDB. Aqui vou explicar o seu código e como é simples
utilizar o MongoDB com PHP. Criei
uma interface bem simples para que possamos enviar os dados sem
precisar ficar mudando no código.
Essa
interface enviará, via POST, as variáveis de conexão com o banco de
dados MySQL. Vamos começar criando/recebendo as
variáveis de conexão com o banco de dados MySQL.
$host = isset($_REQUEST['host_mysql']) ? $_REQUEST['host_mysql'] : "localhost";
$user = isset($_REQUEST['user_mysql']) ? $_REQUEST['user_mysql'] : "usuario";
$pass = isset($_REQUEST['pass_mysql']) ? $_REQUEST['pass_mysql'] : "senha";
$db = isset($_REQUEST['db_mysql']) ? $_REQUEST['db_mysql'] : "teste_latin";
Agora é hora de criar a conexão
com o MongoDB utilizando uma extensão instalada no
php: http://github.com/downloads/mongodb/mongo-php-driver/mongo-1.0.6-r1-php5.3vc6ts.zip
try{
$conexao = new Mongo(); //abre conexão com o MongoDB
$db_mongo = $conexao->$db; //cria a database com o mesmo nome do MySQL
}
catch(MongoConnectionException $e){
die("<h1 class='erro'>Erro do banco de dados MONGODB - Inicie o servidor do MongoDD!</h1><span class='dica'>Dica: Entre no prompt do windows<br />
cd \ <br />
cd mongodb<br />
cd bin<br />
mongod </span>");
}
Caso
o seu MongoDB não esteja rodando, o script indicará o erro e
mostrará a forma como iniciar seu MongoDB no Windows.
Para conseguirmos
pegar o nome de todas as tabelas da nossa database no MySQL
utilizamos a seguinte query:
$query_pega_tabelas= "SHOW TABLES";
O nome do
nosso campo contendo as tabelas será:
$index_tabelas= "Tables_in_".$db; //nome do array com o valor do nome das tabelas via SHOW TABLES
A
variável $db será o nome da nossa database no MySQL.
Após pegarmos os
nomes das nossas tabelas, é hora de irmos de uma
a uma pegando seus dados e inserindo-os. Não
será necessário pegar os metadados (nome,
tipo) dos campos, pois o MongoDB não necessita dessas informações.
if($result_pega_tabelas=mysql_query($query_pega_tabelas)){
while($arr_pega_tabelas[] = mysql_fetch_assoc($result_pega_tabelas)){
if(is_array($v)){
foreach($v as $a => $b){
echo "<h3>Tabela: ".$b."</h3>";
$nome_tabela = $b;
$query = 'select * from '.$nome_tabela;
Geramos uma collection para cada
tabela existente no MySQL.
$collection = $db_mongo->$nome_tabela;
Neste momento estamos rodando linha
por linha da nossa tabela, pegando seus dados.
$rs_select = mysql_query($query);
echo "<h3>Inserindo em ".$nome_tabela."</h3>";
while($arr_dados = mysql_fetch_assoc($rs_select)){
foreach($arr_dados as $c => $v){
Precisamos codificar nossos valores,
assim como os campos, em utf8. Se o banco
já estiver em utf8, não será necessária
a conversão. Para fazer essa conversão, criei
um pequena função utilizando iconv. Para
converter, meu banco está codificado em latin1, que no caso
será repassado como iso-8859-1. Essa função vai ao final do
script.
function utf8_encode_suissa($s) {
return iconv('iso-8859-1', 'utf-8', $s);
}
Após a conversão para utf8,
inserimos o objeto codificado na nossa collection, que terá o mesmo
nome que a tabela correspondente no MySQL.
$obj[utf8_encode_suissa($c)] = utf8_encode_suissa($v); //converto para UTF-8 pois o MongoDB é UTF-8
}
$collection->insert($obj); //aqui inserimos o OBJ codificado em utf-8 no MongoDB
}//fim while
}//fim foreach
}//fim if array
}//fim while
}//fim if
Ao término
do script, você poderá entrar no phpMoAdmin,
ferramenta para manipular as bases e as collections do MongoDB, e ver
na lista das databases sua nova base criada.
O scrip
completo com a interface para inserir os dados se encontra em http://www.nosqlbr.com.br/conversor_mysql_mongodb.zip
Adendo:
Instalação MongoDB
Instalar
o MongDB pode ser um pouco trabalhoso. Veja abaixo um pequeno
tutorial. Se depois você ainda tiver dificuldade, basta procurar em
algum fórum, como o NoSQL.com.br, que você encontrará mais ajuda.
-
Baixe
o MongoDB
(versão
32 bits
ou versão
64 bits) -
Cria
as duas pastas:
c:/mongodb
c:/data/db
-
Extraia todos os arquivos
para
a pasta mongodb -
Abra o prompt de comando e vá até a a pasta c:/mongodb/bin.
Dentro dela, dê o comando mongod
(isso
mesmo, com o
d
no
final)
Pronto,
seu servidor está rodando. Para verificar se está tudo correto,
acesse a página do mongodb em
http://localhost:27017.
Para
unir o MongoDB com o PHP é necessário instalar as DLLs
do driver PHP. Para isso usaremos o WAMP.
-
Baixe o drive do PHP (O WAMP usa o php 5.3 vc6 ts) (add link
http://github.com/downloads/mongodb/mongo-php-driver/mongo-1.0.6-r1-php5.3vc6ts.zip). - Extraia
a dll do MongoDB para a pasta do PHP, no WAMP instalado na minha
máquina está em : C:\wamp\bin\php\php5.3.1\ext - Feche o WAMP e abra-o novamente, vá em PHP > PHP extensions e
habilite a extensão php_mongo.dll . - Feche
e abra o WAMP novamente.
Pronto,
já é pra tudo funcionar.
Se
desejar utilizar o phpmoadmin, faça o download (http://www.phpmoadmin.com)
e o coloque
na pasta do apache.