php - Laravel 4 - 记录 SQL 查询

标签 php laravel

已经有几个关于在 Laravel 4 中记录 SQL 查询的问题。但我几乎尝试了所有这些问题,但仍然没有按照我想要的方式工作。

这是我的情况

  1. 在我的 php View 文件中,我向服务器发出 AJAX 请求
  2. 接收到 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/

相关文章:

php - 在 $wpdb 中找不到行时如何显示错误消息?

php - 使用ajax更新股票价格

mysql - 从 Laravel 备份 .sql

jquery - 使用 jquery 显示动态内容时出现问题?

php - 查询列在另一个表中的位置 - laravel

javascript - PHP javascript 关联数组

php - 使用 Codeigniter 表单助手有意义吗?

php - PayPal IPN - 发送到 ipn.php 的是什么?

javascript - Laravel Vue.js 不会将文件更新到服务器

session - 如何使用 Laravel 制作无状态 Web 应用