world tutorial hello example español cake book mysql logging cakephp

mysql - tutorial - CakePHP: ejecuta la última consulta



cakephp tutorial 3 (9)

Quiero que se ejecute la última consulta que ejecutó CakePHP. No puedo activar la depuración en core.php y no puedo ejecutar el código localmente. Necesito una forma de obtener la última consulta sql y registrarla en el registro de errores sin afectar el sitio en vivo. Esta consulta está fallando pero se está ejecutando.

algo como esto sería genial:

$this->log($this->ModelName->lastQuery);

Gracias por adelantado.


Combinación de la solución de Matt y Blavia (funciona cuando la depuración no es 2):

$dbo = $this->Model->getDatasource(); $oldStateFullDebug = $dbo->fullDebug; $dbo->fullDebug = true; // find or whatever... $this->Model->find("all"); $logs = $dbo->getLog(); $lastLog = end($logs[''log'']); CakeLog::write("DBLog", $lastLog[''query'']); $dbo->fullDebug = $oldStateFullDebug;


Con una rápida lectura del libro, cakephp api getLog puedes activar logTransaction . Aunque no lo he usado, no estoy seguro de cómo funcionará.

De lo contrario, podrías experimentar con FirePHP y aquí está la guía para ello ,

Puede probar DebugKit , aunque creo que todavía necesita depurar 2 para que funcione.

Con suerte, algo podría darle una pista. :)


En CakePHP 1.x, los datos que desea son accesibles en DataSource::_queriesLog . Cake realmente no proporciona un método getter para este miembro, pero el lenguaje subyacente es PHP, nada le impide hacer lo siguiente:

En app/app_model.php :

function getLastQuery() { $dbo = $this->getDatasource(); $logs = $dbo->_queriesLog; return end($logs); }


Esta es una respuesta muy tardía, lo sé, pero para quien necesite esto en el futuro, siempre puede restringir la configuración de la depuración a su IP, por ejemplo:

Configure::write(''debug'', 0); if($_SERVER["REMOTE_ADDR"] == ''192.168.0.100''){ Configure::write(''debug'', 2); //Enables debugging only for your IP. }


Para Cake 2.0, el registro de consultas está protegido, así que esto funcionará

function getLastQuery() { $dbo = $this->getDatasource(); $logs = $dbo->getLog(); $lastLog = end($logs[''log'']); return $lastLog[''query'']; }


Probado en CakePHP v2.3.2

$log = $this->Model->getDataSource()->getLog(false, false); debug($log);


Puedes usar esto en línea.

$dbo = $this->Model->getDatasource(); // store old state $oldStateFullDebug = $dbo->fullDebug; // turn fullDebug on $dbo->fullDebug = true; // Your code here! eg. $this->Model->find(''all''); // write to logfile // use print_r with second argument to return a dump of the array Debugger::log(print_r($dbo->_queriesLog, true)); // restore fullDebug $dbo->fullDebug = $oldStateFullDebug;


Puedes usar esto:

$log = $this->Model->getDataSource()->getLog(false, false); pr($log);die;


Simple, puedes usar la función showLog ()

var_dump($this->YourModel->getDataSource()->showLog());