當前位置:首頁 » 編程語言 » yii列印sql

yii列印sql

發布時間: 2024-03-08 10:35:30

① 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語句嗎

yii何輸出具體的查詢的sql語句:

java">$query=User::find()->where(['id'=>[1,2,3,4])->select(['username'])

//輸出SQL語句

$commandQuery=clone$query;
echo$commandQuery->createCommand()->getRawSql();$users=$query->all();

③ yii2 怎麼執行原生態的insert

$connection = Yii::app()->db; //連接

//查找

$sql = 「SELECT * FROM `tbl_user` ORDER BY id DESC」;

$command = $connection->createCommand($sql);

$result = $command->queryAll();

print_r($result);

//添加

$sql = 」 INSERT INTO `tbl_user` (`username`, `password`, `email`) VALUES (『test』, 『test』, 『[email protected]』) 「;

$command=$connection->createCommand($sql);

print_r($command->execute());

//添加 返回自增id

$command1 = $connection->createCommand(「SELECT last_insert_id()」);

$result = $command1->queryAll();

//常用函數

(1)如果你執行的SQL語句有返回結果集: 例如SELECT。通常用query開頭的系列函數:

$dataReader=$command->query(); // 執行一個 SQL 查詢

$rows=$command->queryAll(); // 查詢並返回結果中的所有行

$row=$command->queryRow(); // 查詢並返回結果中的第一行

$column=$command->queryColumn(); // 查詢並返回結果中的第一列

$value=$command->queryScalar(); // 查詢並返回結果中第一行的第一個字

(2)你執行的SQL語句返回的不是結果集,只是狀態值,例如:INSERT ,UPDATE,DELETE.則用execute()

$this->command->execute();

//使用事務的一種常見情形:CDbTransaction

$transaction = $connection->beginTransaction();

try{

$connection->createCommand($sql1)->execute();

$connection->createCommand($sql2)->execute();

………

$transaction->commit();

}

catch(Exception $e){ // 如果有一條查詢失敗,則會拋出異常

$transaction->rollBack();

}

④ yii2.0獲取到最後一條執行的sql怎麼看

這個有很多種方法

1. yii有提供一個getRawSql方法 比如說一個查詢

$query=User::find();
$query->select(['username','age'])->where(['id'=>1)->one();

echo$query->createCommand()->getRawSql();//輸出sql語句

2.可開啟yii2的debug模塊,這個功能很強大,在裡面可以查到當前頁面所有的sql信息,具體配置方法自行網路,網上太多這個配置了

3.查找Yii源碼 隨便找個模型調用原生的方法 比如 User::updateAll 方法,通過編輯器定位到updateAll方法的源碼 你會發現下面一段代碼

publicstaticfunctionupdateAll($attributes,$condition='',$params=[])
{
$command=static::getDb()->createCommand();
$command->update(static::tableName(),$attributes,$condition,$params);

return$command->execute();
}

繼續定位execute方法

publicfunctionexecute()
{
$sql=$this->getSql();
$rawSql=$this->getRawSql();

Yii::info($rawSql,__METHOD__);
if($sql==''){
return0;
}

$this->prepare(false);
$token=$rawSql;
try{
Yii::beginProfile($token,__METHOD__);

$this->pdoStatement->execute();
$n=$this->pdoStatement->rowCount();

Yii::endProfile($token,__METHOD__);

$this->refreshTableSchema();

return$n;
}catch(Exception$e){
Yii::endProfile($token,__METHOD__);
throw$this->db->getSchema()->convertException($e,$rawSql);
}
}

方法里$rawSql就是最原生要執行的sql拉,在這里打斷點輸出就ok

個人推薦第二種方法,最方法最高效,具體配置方法自己網路,很簡單!

熱點內容
除了安卓還有什麼可以下載的 發布:2024-11-29 04:05:44 瀏覽:381
coreldraw用戶臨時文件夾 發布:2024-11-29 04:05:44 瀏覽:740
如何設置ipad文件夾 發布:2024-11-29 03:59:16 瀏覽:141
如何給u盤文件夾加密 發布:2024-11-29 03:48:37 瀏覽:693
傳奇打元寶腳本 發布:2024-11-29 03:39:52 瀏覽:843
如何裝linux系統 發布:2024-11-29 03:38:17 瀏覽:183
咋清理緩存 發布:2024-11-29 03:18:38 瀏覽:13
linux伺服器的配置文件 發布:2024-11-29 03:18:31 瀏覽:616
安卓軟體誤刪軟體如何恢復 發布:2024-11-29 02:55:58 瀏覽:233
我的世界安卓手機如何改成官服 發布:2024-11-29 02:43:11 瀏覽:290