sqliteyii框架数据库操作数据看对象(DAO)简单总结

Yii提供了劲的数据库编程支持。Yii数据看对象(DAO)建立以PHP的多寡对象(PDO)extension上,使得以一个单一的合之接口可以拜不同的数据库管理体系(DBMS)。使用Yii的DAO开发之应用程序可以生爱地切换使用不同之数据库管理网,而非待改数据访问代码。Yii
的Active Record( AR
),实现了给大规模应用的靶子关联映射(ORM)办法,进一步简化数据库编程。按照约定,一个像样代表一个申明,一个实例代表一行数。Yii
AR消除了绝大多数用以拍卖CRUD(创建,读取,更新和去)数据操作的sql语句之双重任务。
尽管Yii的DAO和AR能够处理几乎所有数据库相关的任务,您还可以在Yii
application中运用自己之数据库。事实上,Yii框架精心设计使得可以与外第三方库同时以。
数码看对象 (DAO)

Yii DAO 基于 PHP Data Objects (PDO)
构建。它是一个吧广大风行的DBMS提供合数访问的扩展,这些 DBMS 包括
mysql, PostgreSQL 等等。因此,要下 Yii DAO,PDO 扩展及特定的 PDO
数据库让(例如 PDO_MYSQL) 必须安装。
Yii DAO 主要含有如下四只类似:
CDbConnection: 代表一个数据库连接。
CDbCommand: 代表一律漫长通过数据库执行的 SQL 语句。
CDbDataReader: 代表一个但上移动的,来自一个询问结果集中的施行的流淌。
CDbTransaction: 代表一个数据库事务。
1、建立数据库连接

要是成立一个数据库连接,创建一个 CDbConnection 
实例并以该激活。连接至数据库需要一个数据源的名(DSN)以指定连接信息。用户称与密码也恐怕会见为此到。当连接至数据库的过程中来误时
(例如,错误的 DSN 或无效的用户名/密码),将会见扔来一个死。

HTML ” data-pbcklang=”html” data-pbcktabsize=”4″>
$connection=new CDbConnection($dsn,$username,$password); //
建立连接。你可以使用 try…catch 捕获可能扔来之雅

$connection->active=true;

 ……

$connection->active=false; // 关闭连接

DSN 的格式在所使用的 PDO 数据库让。总体来说, DSN 要含有 PDO
驱动之名,跟达到一个冒号,再和达到使特定的连日语法。可查阅 PDO 文档
获取更多信息。下面是一个常因此DSN格式的列表。

    * SQLite: sqlite:/path/to/dbfile
    * MySQL: mysql:host=localhost;dbname=testdb
    * PostgreSQL: pgsql:host=localhost;port=5432;dbname=testdb
    * SQL Server: mssql:host=localhost;dbname=testdb
    * Oracle: oci:dbname=//localhost:1521/testdb

出于 CDbConnection 继承自 CApplicationComponent,我们也足以拿该看做一个
应用组件 使用。要这么做的话,请于 应用配置 中配置一个 db
(或外名字)应用组件如下:

array(

 …… ‘components’=>array(

 …… ‘db’=>array(

‘class’=>’CDbConnection’,

 ‘connectionString’=>’mysql:host=localhost;dbname=testdb’,

 ‘username’=>’root’,

 ‘password’=>’password’,

’emulatePrepare’=>true, // needed by some MySQL installations

),

 ),

)

下一场我们就算足以经过 Yii::app()->db
访问数据库连接了。它已深受活动激活了,除非我们特意安排了
CDbConnection::autoConnect 为
false。通过这种方法,这个独立的DB连接就足以当我们代码中之好多地方共享。
2、执行SQL语句

数据库连接起后,SQL 语句就可以通过采用 CDbCommand 
执行了。你得经过运用指定的SQL语句作为参数调用
CDbConnection::createCommand() 创建一个 CDbCommand 实例。

$connection=Yii::app()->db; // 假要你早就建立了一个 “db” 连接 //
如果没有,你可能用显式建立一个连接:

 // $connection=new CDbConnection($dsn,$username,$password);

$command=$connection->createCommand($sql); // 如果需要,此 SQL
语句可经过如下方式修改:

 // $command->text=$newSQL;

如出一辙漫长 SQL 语句会通过 CDbCommand 以如下两栽方法被实践:
execute(): 执行一个任查询 (non-query)SQL语句,例如 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(); //
查询并回到结果中首先实践之首先单字段

3、获取查询结果

以 CDbCommand::query()  生成 CDbDataReader  实例之后,你可通过再调用
CDbDataReader::read()  获取结果吃之推行。你为堪当 PHP 的 foreach
语言结构中采用 CDbDataReader  一行行检索数据。

$dataReader=$command->query(); // 重复调用 read() 直到她回到 false

 while(($row=$dataReader->read())!==false) { … } // 使用 foreach
遍历数据被之每一行

foreach($dataReader as $row) { … } // 一次性领取所有行到一个数组

$rows=$dataReader->readAll();

留神: 不同于query(),
所有的queryXXX()方法会直接归数据。例如,queryRow()会回代表询问结果第一实施的一个数组。
4、使用工作

工作,在 Yii 中表现吧 CDbTransaction  实例,可能会见当脚的情遇启动:
    * 开始事务.
    * 一个个实行查询。任何针对数据库的翻新对外边不可见。
    * 提交业务。如果事情成功,更新成为可见。
    * 如果查询中的一个挫折,整个工作回滚。
上述工作流可以经过如下代码实现:

$transaction=$connection->beginTransaction();

try {
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute(); //…. other SQL
executions
$transaction->commit();

 } catch(Exception $e) // 如果发生同样修查询失败,则会废弃来怪

{
$transaction->rollBack();
}

5、绑定参数

假若避免 SQL 注入攻击 并提高又执行的 SQL 语句的频率,你得
“准备(prepare)”一漫长含有可选参数占位符的 SQL
语句,在参数绑定时,这些占位符将被替换为实在的参数。
参数占位符可以是命名的 (表现为一个唯一的记号) 或不命名的
(表现吗一个问号)。调用 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变量绑定参数,而后人以一个价值。对于那些内存中的不行数目块参数,处于性的设想,应事先采取前者。
6、绑定列

当得到查询结果时,你也可动用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
}

7、使用表前缀

若果动用表前缝,配置 CDbConnection::tablePrefix 
属性为所幸之表前缝。然后,在 SQL 语句被采用 {{TableName}}
代表表的名,其中的 TableName 
是指不牵动前缀的表名。例如,如果数据库含一个称吧 tbl_user 的表,而
tbl_ 被安排也表前缝,那我们不怕好使用如下代码执行用户相关的询问:
 
$sql=’SELECT * FROM {{user}}’;
$users=$connection->createCommand($sql)->queryAll();

原稿链接:http://www.kubiji.cn/topic-id1173.html

网站地图xml地图