当前位置: 首页 > 面试题库 >

Laravel 4-记录SQL查询

禹智渊
2023-03-14
问题内容

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

这是我的情况

  1. 在我的php视图文件中,我向服务器发出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);
});

我只是得到“从my_table那里id =?选择*” 作为没有实际填充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回答了有关将绑定插入到准备好的语句中的问题。



 类似资料:
  • 问题内容: 如何记录django应用程序执行的所有SQL查询? 我想记录所有内容,包括来自管理站点的SQL。我看到了这个问题和一个常见问题解答,但是我仍然不知道应该把它放在哪里 将所有内容记录到一个文件? 所以我的问题是-我应该怎么做才能拥有一个记录所有SQL语句的文件(例如all-sql.log)? 问题答案: 也许看看https://github.com/django-debug-toolba

  • 在Laravel 4中记录SQL查询已经有几个问题。但是我已经尝试了几乎所有的方法,但仍然没有达到我想要的效果。 这是我的情况 > 在我的php视图文件中,我向服务器发出AJAX请求 接收到AJAX请求并运行RAW参数化的PostgresSQL查询(例如: DB::选择('选择*从my_table其中id=?',数组(1)) 如果我用 我只得到“从我的_表中选择*,其中id=?”作为没有实际填充I

  • 问题内容: 我正在使用Oracle 11g标准版。 我想将用户正在执行的所有SQL查询记录到表中。 如何才能做到这一点? 问题答案: 如果您使用的是现代版本的数据库(9i或更高版本),并且您拥有企业版许可证,则可以使用细粒度审核。它使我们能够通过已定义的策略以非常低的粒度审核用户查询。 要捕获SQL文本并绑定变量,您需要在添加FGA策略时适当设置AUDIT_TRAIL参数。 了解更多。 “我使用的

  • 问题内容: 这是我的表格和这些表格的数据 表名: 代码 表名: 详细信息 结果表: 我想从代码表中获取所有记录,而对于每个代码,我必须从详细信息表中获取所有行,如果某些代码具有所需的值,如果没有,则为Null 谢谢 问题答案: 听起来您在寻找笛卡尔积: 尽管对于较大的表,笛卡尔乘积相当慢…所以请确保这是您真正想要的。

  • 主要内容:基于表的记录,基于游标的记录,用户定义的记录,将记录作为子程序参数在本章中,我们将讨论和学习PL/SQL中的记录。 记录是可以容纳不同种类的数据项的数据结构。 记录由不同的字段组成,类似于数据库表的一行。 例如,想要在图书馆中跟踪记录图书信息。可能希望跟踪每本书的以下属性,例如标题,作者,主题,图书ID。 包含每个这些项目的字段的记录允许将图书视为逻辑单元,并允许以更好的方式组织和表示其信息。 PL/SQL可以处理以下类型的记录 - 基于表的记录 基于游标的记录

  • 问题内容: 我负责处理的应用程序之一是每隔x秒检查一次Oracle DB表,以查看是否有新数据要处理(其他实时应用程序正在填充该数据)。 我们新的客户业务流程迫使我们的实时性在同一时间(比如说10000)同时每天填充几次记录来填充该表。下次我的应用程序检查是否有任何要处理的内容时,遇到10 000条记录并尝试对其进行处理。 它的设计不是很好,而且扩展性还不够好。快速解决方案是限制该应用程序从Ora