Olá, tenho um pequeno servidor CentOS rodando o MySQL que precisa ser atualizado diariamente com algumas informações que me são passadas via arquivo XML.
O XML tem a seguinte estrutura:
<?xml version="1.0"?>
01
898002342517744
023805
MARIA MARIA MARIA
8888888888
03/08/2011
12:07
1
016326
CAROLINA CAROLINA
0302
TESTE
11
RECEPCAO
01
898001928493418
033165
MANOEL MANOEL
8999999999
09/08/2011
11:08
1
015525
POLYANNA POLYANNA
0104
TESTE
14
RECEPCAO
e por ai vai.
Sou totalmente leigo em PHP porém encontrei em um site algo parecido com o que quero fazer: http://phpbr.wordpress.com/2007/07/07/xml-to-mysql-transformando-um-arquivo-xml-em-queries-sql-e-blablabla/
Tentei adaptar às minhas necessidades, mas não estou conseguindo, no meu caso o script ficou assim:
<?php
$banco = 'xml2mysql';
$host = 'localhost'; // host
$usuario = 'root'; // usuario
$senha = 'minha_senha'; // senha
// connectamos ao host e selecionamos o banco
mysql_connect($host, $usuario, $senha);
mysql_select_db($banco);
// esta variavel sera a query utilizada para insercao dos
// dados no banco, tendo o %d substituido pelo id_exemplo
// e o %s substituido pela descricao
$query = 'insert into exemplo (GM8_DTATEND, GCS_NOMLOC, GM8_HORAGE, RA_NOME, GM8_MATRIC, GM8_CELULAR) values ("%s", "%s", "%s", "%s", "%s")';
// carregamos o conteudo do arquivo XML
$xml = file_get_contents('demo2.xml');
// transformamos o XML em um objeto, para que possamos trabalhar
// de forma mais simples com ele
$sxml = new SimpleXMLElement($xml);
// aqui iteramos por todo o XML:
// a cada iteracao, $line ira conter um objeto to tipo
// SimpleXMLElement, sendo o equivalente a:
//
//
// 1
// Primeiro exemplo
//
//
foreach ($sxml as $linhaAtual) {
// aqui vamos obter cada item do xml que seria referente
// ao campo da tabela.
// Necessario cast pelo fato de que a propriedade do objeto
// tambem é um objeto do tipo SimpleXMLElement
$data = (string) $linhaAtual->GM8_DATEND;
$local = (string) $linhaAtual->GCS_NOMLOC;
$hora = (string) $linhaAtual->GM8_HORAGE;
$nome = (string) $linhaAtual->RA_NOME;
$matricula = (string) $linhaAtual->GM8_MATRIC;
$celular = (int) $linhaAtual->GM8_CELULAR;
// aqui preparamos a query para ser utilizada
$tmpQuery = sprintf($query, $data, $local, $hora, $nome, $matricula, $celular);
// exibimos a query que será executada
echo sprintf('Executando query: %s%s', $tmpQuery, "\n");
// e aqui executamos a query
mysql_query($tmpQuery);
}
Antes de rodar eu criei o banco "xml2mysql" e a tabela "exemplo":
mysql> show tables;
+---------------------+
| Tables_in_xml2mysql |
+---------------------+
| exemplo |
+---------------------+
1 row in set (0.00 sec)
mysql> SHOW INDEX FROM xml2mysql.exemplo;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| exemplo | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
1 row in set (0.00 sec)
Criei as colunas na tabela e aproveitei e introduzi apenas uma linha na mão:
mysql> SELECT * FROM exemplo;
+----+------------+-------+-------+---------+------------+----------+
| id | data | local | hora | nome | matricula | celular |
+----+------------+-------+-------+---------+------------+----------+
| 1 | 23/10/2010 | prt | 12:00 | teste01 | 12345 | 77777777 |
+----+------------+-------+-------+---------+------------+----------+
1 row in set (0.00 sec)
Mas ao rodar o script PHP, ele executa, mas não mostra o número do celular corretamente e nada vai parar no MySQL:
[localdomain tmp]# php test.php
Executando query: insert into exemplo (GM8_DTATEND, GCS_NOMLOC, GM8_HORAGE, RA_NOME, GM8_MATRIC, GM8_CELULAR) values (0, "RECEPCAO ", "12:07", "CAROLINA CAROLINA ", "898002342517744", "0")
Executando query: insert into exemplo (GM8_DTATEND, GCS_NOMLOC, GM8_HORAGE, RA_NOME, GM8_MATRIC, GM8_CELULAR) values (0, "RECEPCAO ", "11:08", "POLYANNA POLYANNA", "898001928493418", "0")
[localdomain tmp]#
Alguém saberia me informar onde está o erro?
Obrigado,
João Marcelo
João Marcelo
Geek
Registrado
3K Mensagens
71 Curtidas