GVKun编程网logo

在Perl的DBI填写占位符之后,如何打印执行的SQL查询?(plsql 占位符)

12

对于想了解在Perl的DBI填写占位符之后,如何打印执行的SQL查询?的读者,本文将提供新的信息,我们将详细介绍plsql占位符,并且为您提供关于druid如何能打印执行的sql是在哪个数据源上?、l

对于想了解在Perl的DBI填写占位符之后,如何打印执行的SQL查询?的读者,本文将提供新的信息,我们将详细介绍plsql 占位符,并且为您提供关于druid如何能打印执行的sql是在哪个数据源上?、laravel 5.1 如何打印最后一次执行的sql、laravel怎么打印执行的SQL语句(两种方法)、Laravel打印执行的SQL语句的有价值信息。

本文目录一览:

在Perl的DBI填写占位符之后,如何打印执行的SQL查询?(plsql 占位符)

在Perl的DBI填写占位符之后,如何打印执行的SQL查询?(plsql 占位符)

我正在使用Perl的DBI模块。我准备使用占位符的语句,然后执行查询。

是否可以打印出执行的最终查询而无需手动转义参数并将其放入占位符?

谢谢

druid如何能打印执行的sql是在哪个数据源上?

druid如何能打印执行的sql是在哪个数据源上?

DEBUG druid.sql.Statement - {conn-10002, pstmt-20010} Parameters : [113]
DEBUG druid.sql.Statement - {conn-10002, pstmt-20010} Types : [BIGINT]
DEBUG druid.sql.Statement - {conn-10002, pstmt-20010, rs-50019} query executed. 1.043278 millis. 
select * from test.SYS_TEST user0_ where user0_.N_ID=?
DEBUG druid.sql.Statement - {conn-10002, pstmt-20010} clearParameters.

请问各位大神,如何能让druid在输出执行sql的同时,也能把sql所在的数据源打印一起打印出来呢?

也就是com.alibaba.druid.pool.DruidDataSource里面的这个"account"能被一起打印日志上

<!-- 配置这个属性的意义在于,如果存在多个数据源,监控的时候
			可以通过名字来区分开来。如果没有配置,将会生成一个名字,
			格式是:"DataSource-" + System.identityHashCode(this) -->
	    <property name="name" value="account" />

就类似proxool里面打印的语句一样将"account"打印出来,或者有其他什么解决办法能区分不同的数据源执行的sql?

DEBUG org.logicalcobwebs.proxool.account - select  count (*)  from test.game_test t where 1=1 and t.n_gserver_id = ''456789'' and t.s_state in(0,1,2,12);  (4 milliseconds)





laravel 5.1 如何打印最后一次执行的sql

laravel 5.1 如何打印最后一次执行的sql

如何取出最后一次执行的sql

回复内容:

如何取出最后一次执行的sql

DB::connection()-&gt;enableQueryLog(); // 开启查询日志

DB::table(''xxx''); // 要查看的sql

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

print_r($queries); // 即可查看执行的sql,传入的参数等等
登录后复制

Laravel 5.0 是這樣取出的,5.1應該也通用

$queries = DB::getQueryLog();
登录后复制

你也可以裝下這個Laravel-debugbar組件,我平時sql語句調試都是用它

laravel怎么打印执行的SQL语句(两种方法)

laravel怎么打印执行的SQL语句(两种方法)

在laravel中使用eloquent orm查询数据库是‘場常見的事情,但是當我们面對一些複雜的查询需求時,需要通过查看执行的sql语句来进行调试,那么如何打印执行的sql语句呢?

Laravel提供了两种方式来打印执行的SQL语句,一种是通过日志输出,一种是通过事件监听器打印。

通过日志输出

Laravel中通过日志输出执行的SQL语句是最方便的一种方式,在每个环境中都有相应的日志记录和查看方式。

我们可以在配置文件中打开SQL语句的日志记录:

// 在config/database.php文件中,找到default下的connections数组,增加以下选项:
''log_queries'' =&gt; true,  // 开启SQL日志记录
''log_channel'' =&gt; ''daily'', // 日志存储方式,也可使用syslog、errorlog等方式
''log_level'' =&gt; ''debug'', // 日志级别
登录后复制

增加log_queries选项后,Laravel会自动记录执行的SQL语句,日志会输出到storage/logs目录下。

点击下载“修复打印机驱动工具”;

在代码中执行查询语句后,我们可以通过下面的方式来输出SQL语句:

DB::enableQueryLog();
// 执行查询语句
$users = DB::table(''users'')-&gt;get();
// 获取执行的SQL语句
$sql = DB::getQueryLog()[0][''query''];
登录后复制

在上面代码中,首先调用DB::enableQueryLog()方法开启记录SQL语句,在执行查询后,可以通过DB::getQueryLog()方法获取所有已执行的SQL语句,如果要获取最后一条SQL语句,也可使用DB::getLastQuery()方法。

但需要注意的是,使用此方式在生产环境中记录大量的SQL语句将会导致日志体积增大,不利于系统的维护和排查问题,因此不要在生产环境中频繁记录SQL语句的日志。

通过事件监听器

Laravel提供了监听SQL执行事件的方式,开发者可以通过监听SQL执行事件来输出SQL语句,这种方式更加安全可靠,不会在生产环境中产生大量的日志。

通过定义监听器,在执行任意查询语句时都可以打印出相应的SQL语句。下面是实现代码:

// 在AppServiceProvider的boot方法中,添加以下代码
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Events\QueryExecuted;
use Log;

// 注册SQL执行监听器
DB::listen(function (QueryExecuted $queryExecuted) {
    $sql = str_replace("?", "''%s''", $queryExecuted-&gt;sql);
    $bindings = $queryExecuted-&gt;connection-&gt;prepareBindings($queryExecuted-&gt;bindings);
    $fullSql = vsprintf($sql, $bindings);

    Log::debug(''SQL:''.$fullSql);
});
登录后复制

在上述代码中,我们用DB::listen()注册一个事件监听器,当任何查询语句执行时都会被触发。

在监听器中通过 QueryExecuted 事件获取到当前查询的 SQL 语句以及相关绑定参数等信息,然后通过 Log::debug() 方法输出到日志中。

通过上述两种方式,我们实现了在Laravel中打印SQL语句的目的,可以更方便地进行调试和排查问题,在开发中起到不可替代的作用。

以上就是laravel怎么打印执行的SQL语句(两种方法)的详细内容,更多请关注php中文网其它相关文章!

Laravel打印执行的SQL语句

Laravel打印执行的SQL语句

        DB::connection()->enableQueryLog();#开启执行日志
        $result = DB::table('advert')->whereJsonContains('tag',"1")->get();
        dd(DB::getQueryLog());

 

我们今天的关于在Perl的DBI填写占位符之后,如何打印执行的SQL查询?plsql 占位符的分享已经告一段落,感谢您的关注,如果您想了解更多关于druid如何能打印执行的sql是在哪个数据源上?、laravel 5.1 如何打印最后一次执行的sql、laravel怎么打印执行的SQL语句(两种方法)、Laravel打印执行的SQL语句的相关信息,请在本站查询。

本文标签: