Gravar arquivos de log ao executar comandos SQL no PHP.

MySQL, PHP, SQL, XML Comentar >> Marcelo Korjenioski

No código a seguir segue um exem­plo de como ler um arquivo XML e gra­var os dados no banco de dados MySQLe gerar um log da query exe­cu­tada.
Neste exem­plo costa ape­nas as fun­ções de INSERT, DELETE, UPDATE e SELECT.
Para faci­li­tar a vida eu já dei­xei no código as query para criar o banco e as tabe­las uti­li­za­das para exe­cu­tar o código. Eu dei­xei os valo­res default de cone­xão com o MySQL altere os dados da cone­xão caso esteja usando outra con­fi­gu­ra­ção.
A idéia de criar um log das querys exe­cu­ta­das no sis­tema ser­vem para detec­tar erros e tam­bém como um regis­tro caso alguem valor tenha sito movi­men­tado de forma errada.

<?php
// Fazendo a conexão com o servidor MySQL

//Caso queira apenas criar o arquivo XML mude valor para false.
$ativar_conexao = true;

if ($ativar_conexao == true) {
// mysql_pconnect("server", "login", "senha")
$conexao = mysql_pconnect("192.168.1.210","root","dj@jdl#.") or die('falha ao conectar');
// Verifica se o banco de dados existe antes de criar.
$query = 'CREATE DATABASE IF NOT EXISTS test';

if(!mysql_query($query,$conexao)) {
echo 'falha ao criar banco<br />';
}

mysql_select_db("test",$conexao) or die('falha ao selecionar db');

// Verifica se a tabela existe antes de criar.
$query = "CREATE TABLE  IF NOT EXISTS tb_produtos (
pk_produtos int not null auto_increment primary key,
codigo     varchar(255),
nome       varchar(255),
preco      decimal(12,2),
quantidade int(11))";

if(!mysql_query($query,$conexao)) {
echo 'falha ao criar tabela<br />';
}
}
// Fim comentario

$doc = new DomDocument;
// Carrega o arquivo XML com um arquivo DOMDocument
$doc->Load('produtos.xml');
$items = $doc->getElementsByTagName('produto');
// Defino o nome tags no arquivo XML que eu desejo.
$campos = array('nome','preco','quantidade');
$query = NULL;
$query .= "insert into tb_produtos (codigo,nome,preco,quantidade) values ";
for ($i=0; $i < $items->length; $i++) {
$value = NULL;
$value .= " (";
$codigo = $items->item($i)->getAttribute('id');
$value .= "'$codigo',";
echo $items->item($i)->getAttribute('id') , '<br />';
// Busca por elementos definidos no array
$valor = array();
foreach ($campos as $campo) {
$dado = "'" . $items->item($i)->getElementsByTagName($campo)->item(0)->nodeValue . "'";
// Verifico se o campo é preco pq no arquivo xml o preço esta com virgula e para inserir no banco é necessario ponto
if($campo == 'preco') {
// Faz a troca de virgula por ponto.
$dado = str_replace(',','.',$dado);
}
// pego o valor de cada tag e adiciono em um array para fazer o insert no banco.
$valor[] = $dado;
echo $items->item($i)->getElementsByTagName($campo)->item(0)->tagName , ': ';
echo $items->item($i)->getElementsByTagName($campo)->item(0)->nodeValue , '<br />';

}
// uso o implode para criar uma string com os valores separados por vírgula.
$value .= implode(',', $valor);
$value .= ') ';
// Adiciono os dados do valores do insert em array.
$values[] = $value;

echo '<hr>';
}
// uso o implode para criar uma string com os valores separados por vírgula.
$query .= implode(',', $values);

// mostra a query criada na tela.
echo $query;

if ($ativar_conexao == true) {

// GRAVA LOG do arquivo executado mesmo se query estiver errada.
if((stristr($query, 'DELETE') || stristr($query, 'UPDATE') || stristr($query, 'INSERT')  || stristr($query, 'SELECT'))) {

// Verifica se a tabela existe antes de criar.
$query_log = "CREATE TABLE IF NOT EXISTS tb_log (
pk_log int not null auto_increment primary key,
tx_sql text,
acao ENUM('DELETE', 'UPDATE', 'INSERT','SELECT')
);";

if(!mysql_query($query_log,$conexao)) {
echo 'falha ao criar tabela<br />';
}

if(stristr($query, 'DELETE')) {
$acao = 1;
} elseif(stristr($query, 'UPDATE')) {
$acao = 2;
} elseif(stristr($query, 'INSERT')) {
$acao = 3;
} elseif(stristr($query, 'SELECT')) {
$acao = 4;
}

$query_log = "INSERT INTO tb_log (tx_sql,acao) VALUES
(\"$query\",$acao)";

if(!mysql_query($query_log,$conexao)) {
echo 'falha ao inserir dados de log<br />';
}

}

if(!mysql_query($query,$conexao)) {
echo 'falha ao inserir dados<br />';
}
}

Crie um arquivo produtos.xml em um edi­tor de texto e colo­que o código abaixo.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<catalogo>
<produto id='p1'>
<nome>Caderno</nome>
<preco>2,00</preco>
<quantidade>100</quantidade>
</produto>
<produto id='p2'>
<nome>Caneta</nome>
<preco>1,00</preco>
<quantidade>200</quantidade>
</produto>
<produto id='p3'>
<nome>Lapis</nome>
<preco>0,50</preco>
<quantidade>50</quantidade>
</produto>
<produto id='p4'>
<nome>Livro Matematica</nome>
<preco>11,00</preco>
<quantidade>10</quantidade>
</produto>
<produto id='p5'>
<nome>Apontador</nome>
<preco>1,00</preco>
<quantidade>20</quantidade>
</produto>
</catalogo>

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn



2 Responses to “Gravar arquivos de log ao executar comandos SQL no PHP.”

  1. Tiago Says:

    eaw cara muito show ai seu site ! cara pelo amo de deus
    eu to cri­ando uma pagina fake do msn nesse site aki ô >
    ww.justfree.com ele tem como upar php e etc..
    intão con­ti­nu­ando eu ja colo­quei minha pagina fake la do msn e login.php só que quando eu faço os teste la na pagina ai nada fica gra­vado ou seja as senhas e –mail nada
    ai que­ria saber o que ta falan­tando para gra­var as senhas e e-mail das pes­soas que loga­rem
    tem como me aju­dar ai por favor
    ti agra­deço si puder me aju­dar um abraço !

  2. Marcelo Korjenioski Says:

    Me diga qual erro esta dando. Nesta URL que você pos­tou esta dando erro de cone­xão com o banco de dados.

Deixe um comentário

Designed by NattyWP Wordpress Themes.
Images by desEXign.