Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

chamuska

Script php que mostra consultas executadas no mysql ?

Recommended Posts

Pessoal, para fazer alguns testes, estou fazendo um script php que roda no terminal para ver em tempo real quais consultas são executadas no meu mysql, porem, com o mysqli não estou conseguinte o que preciso, que função do mysqli posso usar para exibir com um print_r da vida as querys executadas no BD ?!

 

Tentei com o mysqli_query('show processlist') mas ele não traz as querys executadas.

 

Vlww!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

mysql e mysqli são extensões do PHP. Ou seja, o conjunto de comandos SQL não muda. Se você fez rodar com mysql_query, deve rodar com mysqli_query também

 

Mostre exatamente como fez e quais foram os resultados.

 

Habilite todas as exibições de erro como mostrado neste tópico, para ter certeza de que não há algum erro na chamada da função

Compartilhar este post


Link para o post
Compartilhar em outros sites

BOm, segue meus códigos e reultados!

Classe conexao.class.php:

<?php

class Conexao
{
    private $conexao;
    private $host = 'localhost';
    private $user = 'root';
    private $pass = '12345';
    private $db = '';
    
    private $ultimoId;
    public function get_ultimoId()
    {
        return $this->ultimoId;
    }
    
    public function __construct($base)
    {
	$this->db = $base;
    }
    
    public function conecta() 
    {
        $this->conexao = new mysqli($this->host, $this->user, $this->pass, $this->db);
        
        if($this->conexao->connect_errno){
            return false;
        }
        
        return true;
    }
    
    public function executa_consulta($sql)
    {
        $this->ultimoId = 0;// zera para evitar problemas com inserts anteriores
        
        $consulta = mysqli_query($this->conexao, $sql);
        
        $this->ultimoId = mysqli_insert_id($this->conexao); // valor do id, em caso de insert
        
        return $consulta;
    }
    
    public function info()
    {
        $consulta = $this->conexao->info;
                
        return $consulta;
    }
}

Arquivo que executo no terminal para ver os resultados:

<?php
require_once "conexao.class.php";

$conectado = "";

$conexao = new Conexao('video');

$conectado = $conexao->conecta();

if($conectado===true)
{
	$cont = 0;
	while($cont==0)
	{
		$retorno = "";
		$retorno = $conexao->executa_consulta('show processlist');
	
		if($retorno)
		print_r($retorno);
		
	}
}

O resultado do 'show processlist' executado pelo mysqli_query é esse:

 

mysqli_result Object
(
[current_field] => 0
[field_count] => 8
[lengths] =>
[num_rows] => 1
[type] => 0
)

Preciso que apareça as consultas ai nesse objeto rsrsrsr!

 

 

E ai, o que posso fazer para conseguir as consultas ?!!

 

 

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

mysqli_query retorna um objeto do tipo mysqli_result. Você dá o print_r nesse valor e vê o objeto descrito no seu exemplo.

 

Para buscar os resultados "dentro" desse mysqli_result, precisa usar funções fetch_*, como mysqli_fetch_assoc. Veja exemplos aqui: http://php.net/manual/pt_BR/mysqli-result.fetch-assoc.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

mysqli_query retorna um objeto do tipo mysqli_result. Você dá o print_r nesse valor e vê o objeto descrito no seu exemplo.

 

Para buscar os resultados "dentro" desse mysqli_result, precisa usar funções fetch_*, como mysqli_fetch_assoc. Veja exemplos aqui: http://php.net/manual/pt_BR/mysqli-result.fetch-assoc.php

 

Alterei meu IF e ficou assim:

if($retorno)
		{
			while ($row = $retorno->fetch_assoc()) 
			{
				print_r($row);
			}			
			
		}

Ele imprime isso:

 

Array

(

[id] => 44

[user] => root

[Host] => localhost

[db] => video

[Command] => Query

[Time] => 0

[state] =>

[info] => show processlist

)

 

Enquanto o script rodava, eu executei varias vezes a seguinte consulta: select * from usuarios;

Ele deveria ter mostrado a consulta ?!

 

Para ter certeza do que ele mostrava, executei o script assim: php painel.php > log.txt

Mas não mostrou nenhuma consulta.

 

Falta mais alguma coisa ?

 

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

aí já entra a questão do momento em que os comandos são executados

 

você tem que executar o "show" quando o "select" estiver sendo executado. Deve ser um select relativamente longo, para que você possa executar o show nesse intervalo de tempo

 

Você pode usar SLEEP nas consultas ou mesmo colocá-las em um loop infinito. Assim fica mais fácil conseguir executar o show no momento certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

aí já entra a questão do momento em que os comandos são executados

 

você tem que executar o "show" quando o "select" estiver sendo executado. Deve ser um select relativamente longo, para que você possa executar o show nesse intervalo de tempo

 

Você pode usar SLEEP nas consultas ou mesmo colocá-las em um loop infinito. Assim fica mais fácil conseguir executar o show no momento certo

Puts..... entao ainda tem essa questao da consulta ser executada exatamente na hora que meu script faz a consulta ?!

Por isso que o 'show processlist' geralmente só mostra consulta demoradas!

 

Vc tem alguma dica de como gravar no log do mysql todas as consultas ?! rsrsr!

 

 

 

Vlww!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.