chamuska 5 Denunciar post Postado Maio 31, 2015 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
Beraldo 864 Denunciar post Postado Maio 31, 2015 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
chamuska 5 Denunciar post Postado Junho 1, 2015 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
Beraldo 864 Denunciar post Postado Junho 1, 2015 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
chamuska 5 Denunciar post Postado Junho 1, 2015 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
Beraldo 864 Denunciar post Postado Junho 1, 2015 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
chamuska 5 Denunciar post Postado Junho 1, 2015 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
Beraldo 864 Denunciar post Postado Junho 1, 2015 Dê uma olhada aqui: https://dev.mysql.com/doc/refman/5.1/en/query-log.html http://stackoverflow.com/questions/303994/log-all-queries-in-mysql Compartilhar este post Link para o post Compartilhar em outros sites