网站首页php

Eloquent数据库操作记录执行SQL

发布时间:2017-10-10 10:53:22编辑:slayer.hover阅读(3878)

    在数据库操作中,查看执行过的SQL的记录方法,如下代码所示:

    <?php
        use Illuminate\Database\Capsule\Manager as DB;
        public function indexAction(){
            DB::enableQueryLog();   /**必须在SQL执行之前开启**/
            $rows= DB::table('user')->find($user_id);
                    
            echo  $this->lastsql();
        }
    
        /**
          * 记录执行过的SQL
          * 提前开启 DB::enableQueryLog();
          */
        protected function sqllog(){
    		$sqllogs		= DB::getQueryLog();
    		foreach($sqllogs as $onesql){
    			$query		= str_replace('?','%s',$onesql['query']);
    			$bindings	= $onesql['bindings'];		
    			array_walk($bindings, function(&$v){ $v = "'$v'"; });
    					
    			array_unshift($bindings, $query);
    			$sql = call_user_func_array('sprintf', $bindings);
    			Log::out('sql', 'I', call_user_func_array('sprintf', $bindings));
    		}
    	}




    1.  在SQL执行前开启SQL日志记录,DB::enableQueryLog();

    2.  执行SQL操作。

    3.    用getQueryLog获取SQL信息, 将占位符?替换成对应的值并加上引号, 转换为完整的SQL语句。

评论