Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
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!
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
>
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!
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
>
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!
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