當前位置:首頁 » 編程語言 » 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

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

熱點內容
hibernate查詢sql語句 發布:2025-01-21 18:48:46 瀏覽:303
微信在安卓手機的哪個文件夾 發布:2025-01-21 18:43:52 瀏覽:51
sql127001 發布:2025-01-21 18:31:50 瀏覽:112
伺服器ip是什麼格式 發布:2025-01-21 18:13:13 瀏覽:706
oa和郵箱的初始密碼在哪裡改 發布:2025-01-21 18:08:46 瀏覽:52
如何去除pdf的加密 發布:2025-01-21 18:08:46 瀏覽:565
雲端的伺服器怎麼設置ip 發布:2025-01-21 17:48:52 瀏覽:186
會議腳本 發布:2025-01-21 17:41:29 瀏覽:23
android的toast 發布:2025-01-21 17:41:28 瀏覽:9
linux默認安裝的mysql 發布:2025-01-21 17:40:08 瀏覽:912