Laravel 5.0 框架查看执行过的SQL语句(打印SQL)
方式一
1.在routes.php中添加如下语句 // backend/app/Http/routes.php 最末尾添加即可
Event::listen('illuminate.query', function($sql,$param) {
file_put_contents(public_path().'/sql.log',$sql.'['.print_r($param, 1).']'."\r\n",8);
});
2.在执行我sql语句后,查看public目录下sql.log【backend/public/sql.log】,即可看到刚才执行过的sql语句结果如下:
select * from `u3d_texture2d` where `testid` = ? and `name` = ? and `format` = ? and `width` = ? and `height` = ? and `mipmapcount` = ? and `alphalstransparency` = ? and `anisolevel` = ? and `filtermode` = ? and `ispowertwo` = ? and ROUND(resourcesize/1024, 2) = 12288.000000
[Array
(
[0] => 88
[1] => AA_InBattle_0
[2] => RGB24
[3] => 2048
[4] => 2048
[5] => 1
[6] => False
[7] => 4
[8] => Bilinear
[9] => True
)
]
方式二
$model->toSql(); //更好的方法,TBD
方式三
在 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 语句,以便于调试和性能优化。在开发和调试阶段使用这种方法是很常见的,但在生产环境中,建议关闭查询日志记录,以避免性能损耗和潜在的安全风险。

后续补充
...