Laravel 5.0 框架查看执行过的SQL语句(打印SQL)

时间:2025-03-04 07:04:59

在 Laravel 中,你可以使用 DB facade 的 enableQueryLog 和 getQueryLog 方法来打印出执行的 SQL 语句。下面是一个示例代码,演示了如何在 Laravel 中打印出 SQL:

php
复制
<?php
// 启用查询日志记录
DB::enableQueryLog();

// 执行查询操作
$results = DB::table('users')->get();

// 获取查询日志
$queryLog = DB::getQueryLog();

// 打印 SQL
foreach ($queryLog as $query) {
    $sql = $query['query'];
    $bindings = $query['bindings'];

    // 将 SQL 中的占位符替换为实际的值
    $sql = str_replace(['%', '?'], ['%%', '%s'], $sql);
    $sql = vsprintf($sql, $bindings);

    // 打印 SQL
    echo $sql . PHP_EOL;
}

?>
在上面的示例中,我们首先使用 DB::enableQueryLog() 方法启用查询日志记录。然后,执行查询操作,例如使用 DB::table('users')->get() 获取用户数据。
接下来,使用 DB::getQueryLog() 方法获取查询日志,它会返回一个数组,其中包含了执行的 SQL 语句和绑定的参数。最后,我们遍历查询日志数组,将 SQL 语句中的占位符替换为实际的值,并打印出 SQL 语句。

需要注意的是,查询日志记录是针对 DB facade 的查询操作有效,对于 Eloquent ORM 的查询操作,需要使用 getQueryLog 方法来获取查询日志。
另外,确保在打印 SQL 之前,已经执行了相应的查询操作,否则查询日志将是空的。

这样可以方便地查看执行的 SQL 语句,以便于调试和性能优化。在开发和调试阶段使用这种方法是很常见的,但在生产环境中,建议关闭查询日志记录,以避免性能损耗和潜在的安全风险。