yii 如何以 PDO 方式操作数据库

PHP  MySQL  Yii  

数据访问对象(DAO)

执行 SQL 语句

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

// 假设你已经建立了一个 "db" 连接,可以在 protected/config/main.php 中设置 
$connection=Yii::app()->db;   
 // 如果没有,你可能需要显式建立一个连接: 
// $connection=new CDbConnection($dsn,$username,$password); 
$command=$connection->createCommand($sql); 
// 如果需要,此 SQL 语句可通过如下方式修改: 
// $command->text=$newSQL;

一条 SQL 语句会通过 [CDbCommand] 以如下两种方式被执行:

  1. [execute()|CDbCommand::execute]: 执行一个无查询 (non-query)SQL语句, 例如 INSERT, UPDATE 和 DELETE 。如果成功,它将返回此执行所影响的行数。

  2. [query()|CDbCommand::query]: 执行一条会返回若干行数据的 SQL 语句,例如 SELECT。 如果成功,它将返回一个 CDbDataReader实例,通过此实例可以遍历数据的结果行。为简便起见, (Yii)还实现了一系列 queryXXX() 方法以直接返回查询结果。


可选方法:queryAll(), queryOne(), queryColumn(), queryScalar(),  query()


query()

执行一条 sql 指令并返回结果

public yii\db\DataReader query ( )
returnyii\db\DataReader

DataReader类型的查询结果

throwsyii\db\Exception

如果遇到错误就抛出异常


queryAll() 

执行一条 sql 指令并一次性返回所有的执行结果

public array queryAll ( $fetchMode = null )
$fetchModeinteger

查询结果读取方式,可参考PHP手册填写适合的模式,如果如果不填写就默认为空。

returnarray

查询结果的所有数据。每个 array 元素对应查询结果的一行。如果查询不到任何数据就会返回一个空数组。

throwsyii\db\Exception

执行错误


queryOne()

执行一条 sql 指令并返回查询结果第一行数据

这个方法最好用于一次只需要返回一行查询结果的场景。

public array|false queryOne ( $fetchMode = null )
$fetchModeinteger

查询结果读取方式,可参考PHP手册填写适合的模式,如果如果不填写就默认为空。

returnarray|false

查询结果如果不为空则返回一个 array, array 元素对应查询结果的一行。如果查询不到任何数据就会返回 false。

throwsyii\db\Exception

执行错误


queryScalar()

执行一条 sql 指令并返回查询结果第一行数据的第一列内容。

这个方法最好用于一次只需要返回一个返回值的场景。

public string|null|false queryScalar ( )
returnstring|null|false

返回查询结果第一行数据的第一列内容。如果查询不到任何数据就会返回 false。

throwsyii\db\Exception

执行错误


queryColumn()

执行一条 sql 指令并返回查询结果第一列内容。

这个方法最好用于一次只需要第一列返回值的场景。

public array queryColumn ( )
returnarray

返回查询结果数据的第一列内容。如果查询不到任何数据就会返回一个空 array。

throwsyii\db\Exception

执行错误


执行 SQL 语句时如果发生错误,将会抛出一个异常。


$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 一行行检索数据。


$dataReader=$command->query(); 
// 1、重复调用 read() 直到它返回 false 
while(($row=$dataReader->read())!==false) { ... } 
// 2、使用 foreach 遍历数据中的每一行 
foreach($dataReader as $row) { ... } 
// 3、一次性提取所有行到一个数组 
$rows=$dataReader->readAll();


Note|注意: 不同于 [query()|CDbCommand::query],所有的 queryXXX() 方法会直接返回数据。 例如, [queryRow()|CDbCommand::queryRow] 会返回代表查询结果第一行的一个数组。


时间:2017年03月23日    作者:孟德    分类:后端   浏览:2615    评论:0

链接地址:https://www.abclogs.com/backend_yii_pdo_mysql.html