Yii學(xué)習(xí)總結(jié)之?dāng)?shù)據(jù)訪問(wèn)對(duì)象 (DAO)(2)_PHP教程
推薦:十幅圖告訴你什么是PHP引用這篇文章主要介紹了十幅圖告訴你什么是PHP引用,需要的朋友可以參考下 在一篇文章中看到關(guān)于PHP引用的圖解,對(duì)于加深對(duì)PHP引用的理解很有幫助,在這里備份一下。 如果你對(duì)PHP的引用一點(diǎn)也不了解,可以先看我之前的博客:PHP的引用詳解 十分全面的總結(jié),非常有助于我們理
開(kāi)始事務(wù).
一個(gè)個(gè)執(zhí)行查詢。任何對(duì)數(shù)據(jù)庫(kù)的更新對(duì)外界不可見(jiàn)。
提交事務(wù)。如果事務(wù)成功,更新變?yōu)榭梢?jiàn)。
如果查詢中的一個(gè)失敗,整個(gè)事務(wù)回滾。
上述工作流可以通過(guò)如下代碼實(shí)現(xiàn):
復(fù)制代碼 代碼如下:
$transaction=$connection->beginTransaction();
try
{
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute();
//.... other SQL executions
$transaction->commit();
}
catch(Exception $e) // 如果有一條查詢失敗,則會(huì)拋出異常
{
$transaction->rollBack();
}
5. 綁定參數(shù)
要避免 SQL 注入攻擊 并提高重復(fù)執(zhí)行的 SQL 語(yǔ)句的效率, 你可以 "準(zhǔn)備(prepare)"一條含有可選參數(shù)占位符的 SQL 語(yǔ)句,在參數(shù)綁定時(shí),這些占位符將被替換為實(shí)際的參數(shù)。
參數(shù)占位符可以是命名的 (表現(xiàn)為一個(gè)唯一的標(biāo)記) 或未命名的 (表現(xiàn)為一個(gè)問(wèn)號(hào))。調(diào)用CDbCommand::bindParam() 或 CDbCommand::bindValue() 以使用實(shí)際參數(shù)替換這些占位符。 這些參數(shù)不需要使用引號(hào)引起來(lái):底層的數(shù)據(jù)庫(kù)驅(qū)動(dòng)會(huì)為你搞定這個(gè)。 參數(shù)綁定必須在 SQL 語(yǔ)句執(zhí)行之前完成。
代碼如下:
// 一條帶有兩個(gè)占位符 ":username" 與 ":email"的 SQL
$sql="INSERT INTO tbl_user (username, email) VALUES(:username,:email)";
$command=$connection->createCommand($sql);
// 用實(shí)際的用戶名替換占位符 ":username"
$command->bindParam(":username",$username,PDO::PARAM_STR);
// 用實(shí)際的 Email 替換占位符 ":email"
$command->bindParam(":email",$email,PDO::PARAM_STR);
$command->execute();
// 使用新的參數(shù)集插入另一行
$command->bindParam(":username",$username2,PDO::PARAM_STR);
$command->bindParam(":email",$email2,PDO::PARAM_STR);
$command->execute();
方法 bindParam() 與 bindValue() 非常相似。唯一的不同就是前者使用一個(gè) PHP 變量綁定參數(shù), 而后者使用一個(gè)值。對(duì)于那些內(nèi)存中的大數(shù)據(jù)塊參數(shù),處于性能的考慮,應(yīng)優(yōu)先使用前者。
有關(guān)綁定參數(shù)的更多信息,請(qǐng)參考 相關(guān)的PHP文檔。
6. 綁定列
當(dāng)獲取查詢結(jié)果時(shí),你也可以使用 PHP 變量綁定列。 這樣在每次獲取查詢結(jié)果中的一行時(shí)就會(huì)自動(dòng)使用最新的值填充。
代碼如下:
$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 含有當(dāng)前行中的 username 與 email
}
7. 使用表前綴
從版本 1.1.0 起, Yii 提供了集成了對(duì)使用表前綴的支持。 表前綴是指在當(dāng)前連接的數(shù)據(jù)庫(kù)中的數(shù)據(jù)表的名字前面添加的一個(gè)字符串。 它常用于共享的服務(wù)器環(huán)境,這種環(huán)境中多個(gè)應(yīng)用可能會(huì)共享同一個(gè)數(shù)據(jù)庫(kù),要使用區(qū)別的表前綴以相互區(qū)分。 例如,一個(gè)應(yīng)用可以使用 tbl_ 作為表前綴而另一個(gè)可以使用 yii_。
要使用表前綴,配置 CDbConnection::tablePrefix 屬性為所希望的表前綴。 然后,在 SQL 語(yǔ)句中使用{{TableName}} 代表表的名字,其中的 TableName 是指不帶前綴的表名。 例如,如果數(shù)據(jù)庫(kù)含有一個(gè)名為tbl_user 的表,而 tbl_ 被配置為表前綴,那我們就可以使用如下代碼執(zhí)行用戶相關(guān)的查詢:
代碼如下:
$sql='SELECT * FROM {{user}}';
$users=$connection->createCommand($sql)->queryAll();
分享:PHP的引用詳解本文這里向大家全面展示了PHP的引用,十分的詳細(xì),搭配示例,是篇非常不錯(cuò)的文章,推薦給有需要的小伙伴們參考下。 引用是什么 在 PHP 中引用意味著用不同的名字訪問(wèn)同一個(gè)變量?jī)?nèi)容。這并不像 C 的指針,替代的是,引用是符號(hào)表別名。注意在 PHP 中,變量名和變量?jī)?nèi)容
- 十幅圖告訴你什么是PHP引用
- PHP的引用詳解
- php的閉包(Closure)匿名函數(shù)詳解
- PHP 實(shí)現(xiàn)代碼復(fù)用的一個(gè)方法 traits新特性
- php數(shù)組鍵名技巧小結(jié)
- php使用explode()函數(shù)將字符串拆分成數(shù)組的方法
- php選擇排序法實(shí)現(xiàn)數(shù)組排序?qū)嵗治?/a>
- php插入排序法實(shí)現(xiàn)數(shù)組排序?qū)嵗?/a>
- php數(shù)組添加與刪除單元的常用函數(shù)實(shí)例分析
- Yii學(xué)習(xí)總結(jié)之安裝配置
- 使用php的HTTP請(qǐng)求的庫(kù)Requests實(shí)現(xiàn)美女圖片墻
- PHP實(shí)現(xiàn)加密的幾種方式介紹
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索Yii學(xué)習(xí)總結(jié)之?dāng)?shù)據(jù)訪問(wèn)對(duì)象 (DAO)(2)
- 教程說(shuō)明:
PHP教程-Yii學(xué)習(xí)總結(jié)之?dāng)?shù)據(jù)訪問(wèn)對(duì)象 (DAO)(2)
。