欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

包含yiinosql的詞條

Yii2怎么執(zhí)行原生sql語句查詢

先創(chuàng)建連接對象

創(chuàng)新互聯(lián)建站基于10多年網(wǎng)站建設行業(yè)經(jīng)驗,一直致力于為中小型企業(yè)提供信息化解決方案,創(chuàng)新互聯(lián)建站做到開放、開源,讓企業(yè)所有核心數(shù)據(jù)掌握到企業(yè)手里,打破行業(yè)亂象,讓企業(yè)被網(wǎng)絡公司掌控的局面不再發(fā)生;美工設計部,產(chǎn)品/程序研發(fā)部,營銷策劃部,售后客服部。一切服務為企業(yè)量身定制,專注為您!

$connection = new \yii\db\Connection([

'dsn' = $dsn,

'username' = $username,

'password' = $password,

]);

$connection-open();

查詢返回多行:

$command = $connection-createCommand('SELECT * FROM post');

$posts = $command-queryAll();

返回單行:

$command = $connection-createCommand('SELECT * FROM post WHERE id=1');

$post = $command-queryOne();

查詢多行單值:

$command = $connection-createCommand('SELECT title FROM post');

$titles = $command-queryColumn();

查詢標量值/計算值:

$command = $connection-createCommand('SELECT COUNT(*) FROM post');

$postCount = $command-queryScalar();

yii2怎么連接sql server

在saas中,多租戶數(shù)據(jù)庫分庫管理時常常需要自定義數(shù)據(jù)庫鏈接,并且需要支持在框架加載后再調(diào)用數(shù)據(jù)庫連接。

Yii2 如何定義數(shù)據(jù)庫連接要注意的是:

即除了使用/Yii::app#8722;set()外,還需要再多使用下面一句話:/Yii::app-$database-open();?

因為在框架加載后再調(diào)用時,yii本身并不會幫打開連接。使用如下代碼:

?php/**?*?User:?chenlb?*/namespace?backend/modules/monitorMysql/controllers/show;class?AllDatabases?extends?/yii/base/Action{????private?static?$_conn?=?[];????public?function?run()????{????????//?Create?Test?DB?Connection????????$db?=?$this-getDb('數(shù)據(jù)庫名稱');????????var_dump($db-getSchema()-getTableSchema('log')-columns['id']-isPrimaryKey);????????exit;????}????/**?????*?得到數(shù)據(jù)庫連接??????*/????public?function?getDb($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;??????????????????}????????return?self::$_conn[$database];????}}

分布式系統(tǒng)中應用程序怎么實現(xiàn)數(shù)據(jù)庫讀寫分離

本文實例分析了Yii實現(xiàn)MySQL多數(shù)據(jù)庫和讀寫分離的方法。分享給大家供大家參考。具體分析如下:Yii Framework是一個基于組件、用于開發(fā)大型 Web 應用的高性能 PHP 框架。Yii提供了今日Web 2.0應用開發(fā)所需要的幾乎一切功能,也是最強大的框架之一,下文我們來介紹Yii實現(xiàn)MySQL多庫和讀寫分離的方法前段時間為SNS產(chǎn)品做了架構設計,在程序框架方面做了不少相關的壓力測試,最終選定了YiiFramework,至于為什么沒選用公司內(nèi)部的 PHP框架,其實理由很充分,公司的框架雖然是"前輩"們辛苦的積累,但畢竟不夠成熟,沒有大型項目的歷練,猶如一個涉世未深的年輕小伙。Yii作為一個 頗有名氣開源產(chǎn)品,必定有很多人在使用,意味著有一批人在維護,而且在這之前,我也使用Yii開發(fā)過大型項目,Yii的設計模式和它的易擴展特性足以堪當重任。SNS同一般的社交產(chǎn)品不同的就是它最終要承受大并發(fā)和大數(shù)據(jù)量的考驗,架構設計時就要考慮這些問題, web分布式、負載均衡、分布式文件存儲、MySQL分布式或讀寫分離、NoSQL以及各種緩存,這些都是必不可少的應用方案,本文所講的就是MySQL 分庫和主從讀寫分離在Yii的配置和使用。Yii默認是不支持讀寫分離的,我們可以利用Yii的事件驅(qū)動模式來實現(xiàn)MySQL的讀寫分離。Yii提供了一個強大的CActiveRecord數(shù)據(jù)庫操作類,通過重寫getDbConnection方法來實現(xiàn)數(shù)據(jù)庫的切換,然后通過事件 beforeSave、beforeDelete、beforeFind 來實現(xiàn)讀寫服務器的切換,還需要兩個配置文件dbconfig和modelconfig分別配置數(shù)據(jù)庫主從服務器和model所對應的數(shù)據(jù)庫名稱,附代碼DBConfig.php文件如下:復制代碼 代碼如下:?phpreturn array('passport' = array('write' = array('class' = 'CDbConnection','connectionString' = 'mysql:host=10.1.39.2;dbname=db1′,'emulatePrepare' = true,//'enableParamLogging' = true,'enableProfiling' = true,'username' = 'root','password' = '','charset' = 'utf8′,'schemaCachingDuration'=3600,),'read' = array(array('class' = 'CDbConnection','connectionString' = 'mysql:host=10.1.39.3;dbname=db1,'emulatePrepare' = true,//'enableParamLogging' = true,'enableProfiling' = true,'username' = 'root','password' = '','charset' = 'utf8′,'schemaCachingDuration'=3600,),array('class' = 'CDbConnection','connectionString' = 'mysql:host=10.1.39.4;dbname=db3′,'emulatePrepare' = true,//'enableParamLogging' = true,'enableProfiling' = true,'username' = 'root','password' = '','charset' = 'utf8′,'schemaCachingDuration'=3600,),),),);ModelConfig.php如下:復制代碼 代碼如下:?phpreturn array(//key為數(shù)據(jù)庫名稱,value為Model'passport' = array('User','Post'),'microblog' = array('…'),);?ActiveRecord.php如下:復制代碼 代碼如下:/*** 基于CActiveRecord類的封裝,實現(xiàn)多庫和主從讀寫分離* 所有Model都必須繼承些類.**/class ActiveRecord extends CActiveRecord{//model配置public $modelConfig = '';//數(shù)據(jù)庫配置public $dbConfig = '';//定義一個多數(shù)據(jù)庫集合static $dataBase = array();//當前數(shù)據(jù)庫名稱public $dbName = '';//定義庫類型(讀或?qū)?public $dbType = 'read'; //'read' or 'write'/*** 在原有基礎上添加了一個dbname參數(shù)* @param string $scenario Model的應用場景* @param string $dbname 數(shù)據(jù)庫名稱*/public function __construct($scenario='insert', $dbname = ''){if (!empty($dbname))$this-dbName = $dbname;parent::__construct($scenario);}/*** 重寫父類的getDbConnection方法* 多庫和主從都在這里切換*/public function getDbConnection(){//如果指定的數(shù)據(jù)庫對象存在則直接返回if (self::$dataBase[$this-dbName]!==null)return self::$dataBase[$this-dbName];if ($this-dbName == 'db'){self::$dataBase[$this-dbName] = Yii::app()-getDb();}else{$this-changeConn($this-dbType);}if(self::$dataBase[$this-dbName] instanceof CDbConnection){self::$dataBase[$this-dbName]-setActive(true);return self::$dataBase[$this-dbName];} elsethrow new CDbException(Yii::t('yii','Model requires a "db" CDbConnection application component.'));}/*** 獲取配置文件* @param unknown_type $type* @param unknown_type $key*/private function getConfig($type="modelConfig",$key="){$config = Yii::app()-params[$type];if($key)$config = $config[$key];return $config;}/*** 獲取數(shù)據(jù)庫名稱*/private function getDbName(){if($this-dbName)return $this-dbName;$modelName = get_class($this-model());$this-modelConfig = $this-getConfig('modelConfig');//獲取model所對應的數(shù)據(jù)庫名if($this-modelConfig)foreach($this-modelConfig as $key=$val){if(in_array($modelName,$val)){$dbName = $key;break;}}return $dbName;}/*** 切換數(shù)據(jù)庫連接* @param unknown_type $dbtype*/protected function changeConn($dbtype = 'read'){if($this-dbType == $dbtype self::$dataBase[$this-dbName] !== null)return self::$dataBase[$this-dbName];$this-dbName = $this-getDbName();if(Yii::app()-getComponent($this-dbName.'_'.$dbtype) !== null){self::$dataBase[$this-dbName] = Yii::app()-getComponent($this-dbName.'_'.$dbtype);return self::$dataBase[$this-dbName];}$this-dbConfig = $this-getConfig('dbConfig',$this-dbName);//跟據(jù)類型取對應的配置(從庫是隨機值)if($dbtype == 'write'){$config = $this-dbConfig[$dbtype];}else{$slavekey = array_rand($this-dbConfig[$dbtype]);$config = $this-dbConfig[$dbtype][$slavekey];}//將數(shù)據(jù)庫配置加到component中if($dbComponent = Yii::createComponent($config)){Yii::app()-setComponent($this-dbName.'_'.$dbtype,$dbComponent);self::$dataBase[$this-dbName] = Yii::app()-getComponent($this-dbName.'_'.$dbtype);$this-dbType = $dbtype;return self::$dataBase[$this-dbName];} elsethrow new CDbException(Yii::t('yii','Model requires a "changeConn" CDbConnection application component.'));}/*** 保存數(shù)據(jù)前選擇 主 數(shù)據(jù)庫*/protected function beforeSave(){parent::beforeSave();$this-changeConn('write');return true;}/*** 刪除數(shù)據(jù)前選擇 主 數(shù)據(jù)庫*/protected function beforeDelete(){parent::beforeDelete();$this-changeConn('write');return true;}/*** 讀取數(shù)據(jù)選擇 從 數(shù)據(jù)庫*/protected function beforeFind(){parent::beforeFind();$this-changeConn('read');return true;}/*** 獲取master庫對象*/public function dbWrite(){return $this-changeConn('write');}/*** 獲取slave庫對象*/public function dbRead(){return $this-changeConn('read');}}這是我寫好的類,放在components文件夾里,然后所有的Model都繼承ActiveRecord類就可以實現(xiàn)多庫和主從讀寫分離了,至于如何支持原生的SQL也同時使用讀寫分離,此類都已經(jīng)實現(xiàn)。希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。

yii2.0 怎么打印自動生成的創(chuàng)建sql語句

yii2 的debug工具條可以看到所有東西,比如log和sql(所有執(zhí)行的sql)都可以找到,

一般都是默認開啟的(除非你在執(zhí)行\(zhòng)init這個腳本的時候,選擇了生產(chǎn)環(huán)境)

如果沒有,可以在配置文件中加入:

config['bootstrap'][] = 'debug';

$config['modules']['debug'] = [

'class' = 'yii\debug\Module',

'allowedIPs' = ['127.0.0.1', '::1'],

];

然后刷新頁面,就可以在底部看到debug工具欄了

如果你的應用是restful的,會看不到debug工具欄,不過你可以從其他頁面進入debug頁面,在那里面可以選擇哪個請求所發(fā)生的sql。具體自己慢慢看界面吧,文字難說

yii2.0獲取到最后一條執(zhí)行的sql怎么看

這個有很多種方法

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

$query?=?User::find();

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

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

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

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

public?static?function?updateAll($attributes,?$condition?=?'',?$params?=?[])

{

$command?=?static::getDb()-createCommand();

$command-update(static::tableName(),?$attributes,?$condition,?$params);

return?$command-execute();

}

繼續(xù)定位execute方法

public?function?execute()

{

$sql?=?$this-getSql();

$rawSql?=?$this-getRawSql();

Yii::info($rawSql,?__METHOD__);

if?($sql?==?'')?{

return?0;

}

$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就是最原生要執(zhí)行的sql拉,在這里打斷點輸出就ok

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

分享文章:包含yiinosql的詞條
標題URL:http://chinadenli.net/article15/dsiosdi.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供python全網(wǎng)營銷推廣網(wǎng)站改版域名注冊動態(tài)網(wǎng)站網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)