1、数据访问对象(DAO);
执行 SQL 语句
数据库连接建立后,SQL 语句就可以通过使用 [CDbCommand] 执行了。你可以通过使用指定的SQL语句作为参数调用 [CDbConnection::createCommand()] 创建一个 [CDbCommand] 实例。
[php]
$connection=Yii::app()->db; // 假设你已经建立了一个 "db" 连接
// 如果没有,你可能需要显式建立一个连接:
// $connection=new CDbConnection($dsn,$username,$password);
$command=$connection->createCommand($sql);
// 如果需要,此 SQL 语句可通过如下方式修改:
// $command->text=$newSQL;
一条 SQL 语句会通过 [CDbCommand] 以如下两种方式被执行:
[execute()|CDbCommand::execute]: 执行一个无查询 (non-query)SQL语句, 例如
INSERT
,UPDATE
和DELETE
。如果成功,它将返回此执行所影响的行数。[query()|CDbCommand::query]: 执行一条会返回若干行数据的 SQL 语句,例如
SELECT
。 如果成功,它将返回一个 CDbDataReader实例,通过此实例可以遍历数据的结果行。为简便起见, (Yii)还实现了一系列queryXXX()
方法以直接返回查询结果。
执行 SQL 语句时如果发生错误,将会抛出一个异常。
[php]
$rowCount=$command->execute(); // 执行无查询 SQL,增、删、改
$dataReader=$command->query(); // 执行一个 SQL 查询,但是不返回数据
$rows=$command->queryAll(); // 查询并返回结果中的所有行
$row=$command->queryRow(); // 查询并返回结果中的第一行
$column=$command->queryColumn(); // 查询并返回结果中的第一列
$value=$command->queryScalar(); // 查询并返回结果中第一行的第一个字段
获取查询结果(query方法和read方法)
在 [CDbCommand::query()] 生成 CDbDataReader 实例之后,你可以通过重复调用 [CDbDataReader::read()] 获取结果中的行。你也可以在 PHP 的 foreach
语言结构中使用 CDbDataReader 一行行检索数据。
[php]
$dataReader=$command->query();
// 1、重复调用 read() 直到它返回 falsewhile(($row=$dataReader->read())!==false) { ... }
// 2、使用 foreach 遍历数据中的每一行
foreach($dataReader as $row) { ... }
// 3、一次性提取所有行到一个数组
$rows=$dataReader->readAll();
Note|注意: 不同于 [query()|CDbCommand::query], 所有的
queryXXX()
方法会直接返回数据。 例如, [queryRow()|CDbCommand::queryRow] 会返回代表查询结果第一行的一个数组。