已经有几个关于在 Laravel 4 中记录 SQL 查询的问题。但我几乎尝试了所有这些问题,但仍然没有按照我想要的方式工作。
这是我的情况
- 在我的 php View 文件中,我向服务器发出 AJAX 请求
接收到 AJAX 请求并运行 RAW 参数化 Postgres SQL 查询(例如
DB::select('select * from my_table where id=?', array(1))
如果我使用
Event::listen('illuminate.query', function($sql)
{
Log::error($sql);
});
我刚刚得到“从 id= 的 my_table 中选择 *?”作为没有实际填充 ID 值的日志消息。
如果我使用
$queries = DB::getQueryLog();
$last_query = end($queries);
Log::error(print_r($last_query, true));
我仍然没有填充 ID 的最终 SQL 查询。
最后,如果我使用像 https://github.com/loic-sharma/profiler 这样的日志记录工具- 因为我正在发出 AJAX 请求,所以它没有显示任何内容。
我是否已经用尽了所有选择?还有更好的方法吗?
最佳答案
这是我目前用于记录 sql 查询的内容。您应该能够将其放入主路由文件中,然后将 'log' => true 添加到数据库配置中。
if (Config::get('database.log', false))
{
Event::listen('illuminate.query', function($query, $bindings, $time, $name)
{
$data = compact('bindings', 'time', 'name');
// Format binding data for sql insertion
foreach ($bindings as $i => $binding)
{
if ($binding instanceof \DateTime)
{
$bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
}
else if (is_string($binding))
{
$bindings[$i] = "'$binding'";
}
}
// Insert bindings into query
$query = str_replace(array('%', '?'), array('%%', '%s'), $query);
$query = vsprintf($query, $bindings);
Log::info($query, $data);
});
}
感谢 Jeemusu 回答有关将绑定(bind)插入到准备好的语句中的问题。
关于php - Laravel 4 - 记录 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19131731/