首頁  >  文章  >  後端開發  >  Yii 11.17 資料庫相關操作說明

Yii 11.17 資料庫相關操作說明

不言
不言原創
2018-04-28 11:06:101279瀏覽

這篇文章介紹的內容是關於Yii 11.17 資料庫相關操作說明,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

範例:

#
$result = array(
    'id'=>null,
    'val'=>0
);
$row1 = Yii::app()->db->createCommand()->insert('test1', $result);
$id   = Yii::app()->db->getLastInsertID();
$row2 = Yii::app()->db->createCommand()->update('test1', array('val'=>$id) , 'id=:id',array(':id'=>$id));
echo $id;
exit;

#1. 建立資料庫連線可以使用 try...catch 擷取可能拋出的例外
##$connection=new CDbConnection($dsn,$username,$password);
#   DSN格式
#   SQLite: sqlite:/path/to/dbfile
#   MySQL: mysql:host=localhost;dbname=testdb
#   PostgreSQL: pgsql:host=localhost;port=5432;dbname=testdb









##4 #   SQL Server: mssql:host=localhost;dbname=testdb
#   Oracle: oci:dbname=//localhost:1521/testdb

#在設定檔裡面修改別名


array(
    'components'=>array(
        'db'=>array(
            'class'=>'CDbConnection',
            'connectionString'=>'mysql:host=localhost;dbname=testdb',
            'username'=>'root',
            'password'=>'password',
            'emulatePrepare'=>true,  // needed by some MySQL installations
        ),
    ),
)

# 然後使用這種方式來建立連接,我們就可以透過

$connection = Yii::app()->db

# 存取資料庫連接了。它已經被自動啟動了,除非我們特意配置了
# CDbConnection::autoConnect 為 false。
# 透過這種方式,這個單獨的DB連接就可以在我們程式碼中的許多地方共享。
# 如果沒有,你可能需要明確建立一個連線:
# $connection=new CDbConnection($dsn,$username,$password);

$connection->active=true;  # 建立链接之后active为true;
$connection->active=false;    # 关闭连接

##執行SQL

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

#SQL修改
$command->text = $newSQL;













#execute()方法用來執行INSERT, UPDATE 和DELETE 。
如果成功,它將傳回此執行所影響的行數。
#query() 方法執行一條會傳回若干行資料的 SQL 語句,例如 SELECT。
#如果成功,它將傳回一個CDbDataReader 實例,透過此實例可以遍歷資料的結果行。
#為簡單起見,(Yii)也實作了一系列 queryXXX() 方法以直接傳回查詢結果
#如果SQL發生錯誤,將會拋出一個例外。 .

$rowCount   =    $command->execute();        # 执行无查询 SQL
$dataReader =    $command->query();          # 执行一个 SQL 查询
$rows       =    $command->queryAll();       # 查询并返回结果中的所有行
$row        =    $command->queryRow();       # 查询并返回结果中的第一行
$column     =    $command->queryColumn();    # 查询并返回结果中的第一列
$value      =    $command->queryScalar();    # 查询并返回结果中第一行的第一个字段


















##取得查詢結果
#在產生CDbDataReader後

#重複呼叫CDbDataReader::read()

#也可以在foreach 語言結構中使用CDbDataReader

#例如



#

$dataReader = $command->query();

#方法1 重複呼叫read() 直到它傳回false

#while
( ($row = $dataReader->read()) !== false) { ... }
##方法2 使用foreach 遍歷資料中的每一行

foreach
# ($dataReader as $row) { ... }

#方法3 一次提取所有行到一個數組###$rows = $dataReader->readAll();####注意:#### #所有的queryXXX() 方法會直接回傳資料####query()卻不會,回傳的是一個CDbDataReader 的實例####使用交易######
$transaction= $connection->beginTransaction();
try
{
    $connection->createCommand($sql1)->execute();
    $connection->createCommand($sql2)->execute();
    #其他
    $transaction->commit();
}
catch(Exception $e) # 如果有一条查询失败,则会抛出异常
{
    $transaction->rollBack(); #回滚
}
######### ########################################################### ######預處理(參數綁定)  避免注入提高重複執行的效率####佔位符可以是命名的(表現為一個唯一的標記) 或未命名的(表現為一個問號)。佔位符將被替換為實際的參數。 ####呼叫 CDbCommand::bindParam() 或 CDbCommand::bindValue() 以使用實際參數取代這些佔位符。 ####這些參數不需要使用引號引起來:底層的資料庫驅動會為你搞定這個參數綁定必須在 SQL 語句執行之前完成。 ####範例####一條帶有兩個佔位符":username" 和":email"的SQL######
$sql="INSERT INTO tbl_user (username, email) VALUES(:username,:email)";
$command = $connection->createCommand($sql);
####用實際的使用者名稱替換佔位符": username"######
$command->bindParam(":username", $username, PDO::PARAM_STR);
####用實際的Email 取代佔位符":email"######
$command->bindParam(":email",$email,PDO::PARAM_STR);
$command->execute();
####重複執行同一個邏輯的時候####使用新的參數集插入另一行######
$command->bindParam(":username",$username2,PDO::PARAM_STR);
$command->bindParam(":email",$email2,PDO::PARAM_STR);
$command->execute();
####bindParam() 和bindValue() 非常相似。 ####唯一的差異就是前者使用一個 PHP 變數綁定參數,####而後者使用一個值。對於那些記憶體中的大數據塊參數,處於效能的考慮,應優先使用前者。 ########################################################### ##############綁定列######
$sql="SELECT username, email FROM tbl_user";
$dataReader=$connection->createCommand($sql)->query();
####使用$username 變數綁定第一列(username)######
$dataReader->bindColumn(1,$username);
#### #使用$email 變數綁定第二列(email)######
$dataReader->bindColumn(2,$email);
######while###($dataReader->read()!==false)###{## #    #$username 和$email 含有目前行中的username 和email###    #這裡就不用每次都給兩個變數賦值了###}############### ##################################################使用表前綴####配置CDbConnection::tablePrefix 屬性為所希望的表前綴。 ######
array(
    'components'=>array(
        'db'=>array(
            'class'=>'CDbConnection',
            'connectionString'=>'mysql:host=localhost;dbname=testdb',
            'username'=>'root',
            'password'=>'password',
            'emulatePrepare'=>true,  // needed by some MySQL installations
            'tablePrefix'=>"表前缀_"
        ),
    ),
)
$sql='SELECT * FROM {{user}}';
$users=$connection->createCommand($sql)->queryAll();
################################
$user = Yii::app()->db->createCommand()
        ->select('username, password')
        ->from('tbl_user')
        ->where('id=:id', array(':id'=>1))
        ->queryRow();
###where() 方法(可用自v1 .1.6)###public CDbCommand where(mixed $conditions, array $params=array())###$conditions    mixed         放在WHERE部分的條件。 ###$params        array         綁定到此查詢的參數 (name=>value)###{return}       CDbCommand    傳回此指令物件本身##設定設定的WHERE。 ###這個方法要求一個 $conditions 參數和一個 $params 參數, 指定值綁定到查詢。 ################

$conditions 參數可以是一個字串(例如 'id=1')或一個陣列。

如果是後者,它必須是這種格式array(operator, operand1, operand2, ...), 運算符可以是下面當中的一個,可能的運算元依賴對應的運算子:
and: 運算元應該使用AND連接起來。
例如:
array('and', 'id=1', 'id=2') 
將產生
'id=1 AND id=2'。如果一個操作數是一個數組, 它將被使用這裡描述的相同規則轉換成一個字串。例如: 
array('and', 'type=1', array('or', 'id=1', 'id=2')) 
將產生 
'type=1 AND ( id=1 OR id=2)'
該方法將不做任何引用或轉義。
or: 和 and 運算子相似,除了操作數是使用OR連接起來。
in: 操作數1應該是一列或DB表達式,操作數2應該是數組, 表示對應的列的值或DB表達式應該在的範圍。
例如:
array('in', 'id', array(1,2,3)) 
將產生'id IN (1,2,3)'
這個方法將正確的引用列名和範圍中的轉義值。
not in: 和 in 相似,除了在產生條件時把IN替換成NOT IN。
like: 運算元1應該是一列或一個DB表達式,操作數2是一個字串或一個陣列 表示列或DB表達式應該like的值。
例如: 
array('like', 'name', '%tester%') 
將產生 
"name LIKE '%tester%'"
當值範圍被給定為一個數組,多個LIKE謂語將被生成並使用AND連接起來。
例如:
array('like', 'name', array('%test%', '%sample%')) 
將產生 
"name LIKE '%test%' AND name LIKE '%sample%'"
這個方法將正確的引用列名和範圍中的轉義值。
not like: 和 like相似,除了在產生條件時使用NOT LIKE取代LIKE。
or like: 和 like相似,除了OR被用來把LIKE謂語連接起來。
or not like: 和 not like相似,除了OR被用作把NOT LIKE謂語連接起來。

相關推薦:

yii 框架的詳情

#Yii 多重應用多模組

############################### #Yii2配置基本概念######

以上是Yii 11.17 資料庫相關操作說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn