yii獲取執行的sql
『壹』 yii2怎麼連接sql server
在saas中,多租戶資料庫分庫管理時常常需要自定義資料庫鏈接,並且需要支持在框架載入後再調用資料庫連接。
Yii2 如何定義資料庫連接要注意的是:
即除了使用/Yii::app−>set()外,還需要再多使用下面一句話:/Yii::app->$database->open();
因為在框架載入後再調用時,yii本身並不會幫打開連接。使用如下代碼:
php"><?php/***User:chenlb*/namespacebackend/moles/monitorMysql/controllers/show;classAllDatabasesextends/yii/base/Action{privatestatic$_conn=[];publicfunctionrun(){//CreateTestDBConnection$db=$this->getDb('資料庫名稱');var_mp($db->getSchema()->getTableSchema('log')->columns['id']->isPrimaryKey);exit;}/***得到資料庫連接*/publicfunctiongetDb($database){if(!isset(self::$_conn[$database])){$connInfo=['class'=>'yii/db/Connection','dsn'=>'mysql:host=HOST_IP;port=3307;dbname='.$database,'username'=>'username','password'=>'password','charset'=>'utf8'];/Yii::$app->set($database,$connInfo);/Yii::$app->$database->open();self::$_conn[$database]=/Yii::$app->$database;}returnself::$_conn[$database];}}
『貳』 yii 中如何輸出剛剛執行的完整的sql語句
1.修改main.php,加入如下代碼:
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning,trace',
),
// 以下是新加
array( // configuration for the toolbar
'class'=>'XWebDebugRouter',
'config'=>'alignLeft, opaque, runInDebug, fixedPos, collapsed, yamlStyle',
'levels'=>'error, warning, trace, profile, info',
//'categories' => 'system.db.*',
'allowedIPs'=>array('127.0.0.1','::1','192.168.1[0-5].[0-9]{3}','如果程序在外網需要填入你的公網的ip'),
),
),
)
2.db鏈接的配置裡面做下修改:
'db'=>array(
'connectionString'=>'mysql:host=*.*.*.*;dbname=test',
'emulatePrepare'=>true, // 加入
'enableParamLogging' => true, // 加入
'username'=>'-----',
'password'=>'---',
'charset'=>'utf8',
'schemaCachingDuration'=>'0',
'autoConnect'=>false,
),
3.完成
『叄』 怎麼獲取執行的sql語句
1、select b.spid,a.sid,a.serial#,a.machine from v$session a,v$process b where a.paddr = b.addr and a.machine='yz';
PID SID SERIAL# MACHINE
9497 49 3406 yz
2、利用10046事件開始跟蹤
SQL>execute sys.dbms_system.set_ev(49, 3406,10046,1,'');
PL/SQL procere successfully completed.
、這時候你可以運行應用程序,對於web 應用你就可以打開你認為性能比較差頁面。
4、如果你要查看這段時間執行了哪些sql語句,可以執行下面的語句結束跟蹤
SQL>execute sys.dbms_system.set_ev(49,3406,10046,0,'');
PL/SQL procere successfully completed.
5、SQL trace 工具會收集這個過程中執行的SQL的性能狀態數據,記錄到一個跟蹤文件中.這個跟蹤文件提供了許多有用的信息,例如解析次數.執行次數,CPU使用時間等。
6、這時候你可以通過下面的語句獲得產生的跟蹤文件所在的目錄
SQL> select value from v$parameter where name = 'user_mp_dest';
VALUE
--------------------------------------------------------------------------------
/opt/oracle/admin/ocn/ump
7、在/opt/oracle/admin/ocn/ump下找到yzoracle_ora_9497.trc。9497是你當前應用的spid。
8、注意yzoracle_ora_9497.trc是不可讀的,我們需要執行oracle的tkprof命令,將yzoracle_ora_9497.trc轉化為我們可讀的文本文件。
tkprof yzoracle_ora_9497.trc yzoracle_ora_9497.sql
這樣你就可以在yzoracle_ora_9497.sql文件中看到所有的sql語句執行次數,CPU使用時間等數據。
『肆』 Yii2鎬庝箞鎵ц屽師鐢焥ql璇鍙ユ煡璇
Yii2鎬庝箞鎵ц屽師鐢焥ql璇鍙
鎵ц岋細
Yii::$app->getDb()->createCommand("Your SQL")->execute();
鏌ヨ錛
Yii::$app->getDb()->createCommand("Your SQL")->queryAll();
鍏朵粬錛
Yii::$app->getDb()->createCommand("Your SQL")->xxx
『伍』 鎬庝箞鑾峰彇exec(@sql)鐨勬墽琛岀粨鏋
exec(@sql)鎵ц屽悗錛岀粨鏋滃氨浼氭樉紺哄湪緇撴灉鏍忛噷銆
涓句緥錛
浠g爜濡備笅
declare@tablenamevarchar(20)
declare@sqlvarchar(2000)
set@tablename='test'
set@sql='select*from'+@tablename+''
exec(@sql)
鎵ц岀粨鏋滐細
『陸』 yii2.0 怎麼列印自動生成的創建sql語句
在config/main.php中
'components'=>array(
'db'=>array(
'enableParamLogging' => true,//增加這行
),
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'trace, info error, warning', //日誌標准增加trace, info
),
),
),
)
在你的application.log中可以直接查看, 另外一種方法,也是最方便的就是安裝debugtoolbar擴展,開發必備.