這篇文章介紹的內容是關於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
$connection->active=true; # 建立链接之后active为true;
$connection->active=false; # 关闭连接
$command=$connection->createCommand($sql);
#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後
#也可以在foreach 語言結構中使用CDbDataReader
#
$dataReader = $command->query();
foreach
# ($dataReader as $row) { ... }
$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謂語連接起來。
相關推薦:
############################### #Yii2配置基本概念######以上是Yii 11.17 資料庫相關操作說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!