当前位置:首页 » 编程语言 » 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

个人推荐第二种方法,最方法最高效,具体配置方法自己网络,很简单!

热点内容
python模拟访问网页 发布:2024-11-29 04:33:21 浏览:227
除了安卓还有什么可以下载的 发布: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