yii如何使用数据库
Yii通过数据库访问对象(Database Access Objects,简称DAO)来使用数据库。DAO是建立在 PDO 之上的,一套面向对象的方式来访问数据库的API。
接下来,我们从如何连接数据库,如何查询数据这些方面来学习DAO。
Yii如何链接数据库
- 链接数据库的操作通常都放在配置文件中(如)
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
- 之后会建立一个yii\db\Connection对象,用该对象访问数据
- 这个数据库的链接对象的写法:Yii::$app->db
- 如需要链接其他数据库只需要改掉dsn(如)
//'dsn' => 'sqlite:/path/to/database/file', // SQLite
//'dsn' => 'pgsql:host=localhost;port=5432;dbname=mydatabase', // PostgreSQL
//'dsn' => 'cubrid:dbname=demodb;host=localhost;port=33000', // CUBRID
//'dsn' => 'sqlsrv:Server=localhost;Database=mydatabase', // MS SQL Server, sqlsrv driver
//'dsn' => 'dblib:host=localhost;dbname=mydatabase', // MS SQL Server, dblib driver
//'dsn' => 'mssql:host=localhost;dbname=mydatabase', // MS SQL Server, mssql driver
//'dsn' => 'oci:dbname=//localhost:1521/mydatabase', // Oracle
- 如需连接多个数据库只需要在加入数据库连接即可(如)
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
'db2' =>[
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo1',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]
查询数据
利用sql语句查询(yii\db\Command)
如:我要查看文章状态的第一条语句:
$post = Yii::$app->db->createCommand("select from article_status")->queryOne();
$post 已数组的形式接受 。返回一个数据
优点
简单:此方法比较简单,只需要处理数组和sql语句即可
高校:使用Sql语句数据库处理起来十分方便
缺点
不安全:容易留下Sql注入的危险
不兼容:不同数据库使用的Sql语句不一样,不利于适用多种数据库
用法
Yii::$app->db->createCommand($sql = null)->各种方法
如何要执行非查询sql语句(例如INSERT,DELETE,UPDATE),需要调用execute()
例如:
Yii::$app->db->createCommand("insert into article_status value(10,'asda',5)")
->execute()
如果要执行需返回结果集的sql语句需要调用queryAll()、queryOne()、queryColumn()、query()或者queryScalar()
例如:
$post = Yii::$app->db->createCommand("select from article_status")->queryOne();
query(): 返回DataReader对象,并返回查询结果集
queryAll():返回所有结果集的所有,
queryOne():返回结果集的第一行数据
queryCoulum(): 返回结果集每一行的第一列元素
queryScalar(): 返回结果集中第一行第一列的值(如成功返回该值,失败则返回false)
支持绑定参数
bindParam(name, &value, dataType=null, length = null, $driverOptions = null)
Yii::$app->db->createCommand("select * from article_status where id=:id")->bindParam(":id",$name)->getRawSql();
得到sql语句(注意绑定参数后获取参数不能用getsql()要用getRawSql()函数)
string(39) "select * from article_status where id=1"
bindValue( name, value, $dataType = null) 绑定一个参数,直接写值不用变量
Yii::$app->db->createCommand("select * from article_status where id=:id")->bindValue(':id',1)->getRawSql()
bindValues($values) 绑定一堆参数(用数组形式)
Yii::$app->db->createCommand("select * from article_status where id=:id AND name = :name")->bindValues([':name'=>'ss',':id'=>1])->getRawSql();