Yii Framework2.0开发教程(5)数据库mysql函数

jerry Yii2 2015年11月23日 收藏

继续《Yii Framework2.0开发教程(3)数据库mysql入门》

首先给一些关于yii2数据库支持的介绍

Yii 基于 PHP's PDO建立了一个成熟的数据库访问层。它提供统一的 API 并解决了一些不同 DBMS 产生的使用不利。 Yii 默认支持以下 DBMS :
MySQL
MariaDB
SQLite
PostgreSQL
CUBRID: version 9.1.0 or higher.
Oracle
MSSQL: version 2012 或更高版本,如需使用 LIMIT/OFFSET。

配置

开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的" Web 应用是 config/web.php),如下所示:

  1. return [
  2.     // ...
  3.     'components' => [
  4.         // ...
  5.         'db' => [
  6.             'class' => 'yii\db\Connection',
  7.             'dsn' => 'mysql:host=localhost;dbname=mydatabase', // MySQL, MariaDB
  8.             //'dsn' => 'sqlite:/path/to/database/file', // SQLite
  9.             //'dsn' => 'pgsql:host=localhost;port=5432;dbname=mydatabase', // PostgreSQL
  10.             //'dsn' => 'cubrid:dbname=demodb;host=localhost;port=33000', // CUBRID
  11.             //'dsn' => 'sqlsrv:Server=localhost;Database=mydatabase', // MS SQL Server, sqlsrv driver
  12.             //'dsn' => 'dblib:host=localhost;dbname=mydatabase', // MS SQL Server, dblib driver
  13.             //'dsn' => 'mssql:host=localhost;dbname=mydatabase', // MS SQL Server, mssql driver
  14.             //'dsn' => 'oci:dbname=//localhost:1521/mydatabase', // Oracle
  15.             'username' => 'root', //数据库用户名
  16.             'password' => '', //数据库密码
  17.             'charset' => 'utf8',
  18.         ],
  19.     ],
  20.     // ...
  21. ];

另外请参考PHP manual获取更多有关 DSN 格式信息。

在我们的例子中给出的配置文件是

  1. <?php
  2. //配置的数据库连接可以在应用中通过 Yii::$app->db 访问
  3.  
  4. return [
  5.     'class' => 'yii\db\Connection',
  6.     'dsn' => 'mysql:host=localhost;dbname=zhyoulun',
  7.     'username' => 'root',
  8.     'password' => '20092565',
  9.     'charset' => 'utf8',
  10. ];

接下来我们就可以在《Yii Framework2.0开发教程(1)配置环境及第一个应用HelloWorld》建立的views/zhyoulun/helloworld.php中写我们接下来的测试代码。


第一步、数据库连接初始化的两种方式

(1)

  1. $connection = Yii::$app->db;
  2. $connection->open();

(2)

  1. $connection = new \yii\db\Connection(
  2. ['dsn' => 'mysql:host=localhost;dbname=zhyoulun',
  3.     'username' => 'root',
  4.     'password' => '20092565',
  5.     'charset' => 'utf8']
  6. );
  7. $connection->open();

第二步:查询并显示数据

  1. $command = $connection->createCommand('SELECT * FROM country');
  2. $countries = $command->queryAll();
  3. echo '<pre>';
  4. print_r($countries);
  5. echo '</pre>';


整个helloworld.php代码如下

  1. <?php
  2. //$connection = Yii::$app->db;
  3. //$connection->open();
  4.  
  5. $connection = new \yii\db\Connection(
  6. ['dsn' => 'mysql:host=localhost;dbname=zhyoulun',
  7.     'username' => 'root',
  8.     'password' => '20092565',
  9.     'charset' => 'utf8']
  10. );
  11. $connection->open();
  12.  
  13. $command = $connection->createCommand('SELECT * FROM country');
  14. $countries = $command->queryAll();
  15. echo '<pre>';
  16. print_r($countries);
  17. echo '</pre>';
  18.  
  19. ?>

第三步、我们继续接着写,实验其他常用的函数。

(1)queryOne,返回单行

  1. $command = $connection->createCommand("SELECT * FROM country WHERE code='BR'");
  2. $country = $command->queryOne();
  3. echo '<pre>';
  4. print_r($country);
  5. echo '</pre>';


(2)queryColumn,查询多列值

  1. $command = $connection->createCommand("SELECT code FROM country");
  2. $country = $command->queryColumn();
  3. echo '<pre>';
  4. print_r($country);
  5. echo '</pre>';



(3)queryScalar,查询标量值/计算值

  1. $command = $connection->createCommand("SELECT count(*) FROM country");
  2. $country = $command->queryScalar();
  3. echo '<pre>';
  4. print_r($country);
  5. echo '</pre>';


(4)如果执行 SQL 不返回任何数据可使用命令中的 execute 方法(UPDATE, INSERT, DELETE 更新、插入和删除等)

更新

  1. $command = $connection->createCommand("UPDATE country SET name='Brazil-haha' WHERE code='BR'");
  2. $command->execute();


更新

  1. $connection->createCommand()->update('user', ['status' => 1], 'age > 30')->execute();

插入

  1. $connection->createCommand()->insert('user', [
  2.     'name' => 'Sam',
  3.     'age' => 30,
  4. ])->execute();

一次插入多行

  1. $connection->createCommand()->batchInsert('user', ['name', 'age'], [
  2.     ['Tom', 30],
  3.     ['Jane', 20],
  4.     ['Linda', 25],
  5. ])->execute();

删除

  1. $connection->createCommand()->delete('user', 'status = 0')->execute();

%======================================分割线======================================%

  1. $command = $query->createCommand();
  2. $rows = $command->queryAll();

类似中写法的一种替代方式是(select方法)

  1. $query = new \yii\db\Query;
  2. //组织查询语句
  3. $query->select('code')->from('country')->limit(5);
  4. //编译并执行查询语句
  5. $row = $query->all();
  6. echo '<pre>';
  7. print_r($row);
  8. echo '</pre>';

其他函数如where、groupby、orderby、having等参见http://www.yiichina.com/guide/2/db-query-builder